몇 개의 Raspberry Pi를 일부 홈 네트워크에 설치하고 포트 전달 없이 원격 클라이언트에서 SSH를 통해 액세스할 수 있도록 하고 싶습니다.
클라이언트는 고정되어 있지 않으므로 모든 클라이언트가 모든 Raspberry Pi에 연결할 수 있어야 합니다.
현재 내 생각은 각 RPI가 알려진 IP를 사용하여 중앙 서버에 대한 역방향 SSH 연결을 열도록 하여 클라이언트가 C&C 서버에 연결할 수 있도록 하는 것입니다. 그런 다음 어떻게든 연결을 RPI 중 하나로 전달합니다(어떤 RPI를 선택할 수 있는지). 클라이언트가 C&C 서버에 연결하는 포트)
지금까지 나는 다음과 같이 RPI 포트 22를 C&C 서버에 제공해야 한다는 것을 알고 있습니다.
RPI로 실행:
ssh -R 127.0.0.1:2222:127.0.0.1:22 user@[c&c ip]
이제 C&C는 이론적으로 로컬 2222 포트에 연결하여 Raspi 중 하나에 연결할 수 있지만 지금까지는 C&C를 통해 외부에서 RPI 중 하나에 연결하는 기능이 없습니다.
편집: 해결책을 찾았습니다:
C&C 서버에서 /etc/ssh/sshd_config를 편집 gatewayports
하고 yes
.
이제 C&C 서버의 포트 2222에 연결하여 RPI에 도달할 수 있습니다.
답변1
포트포워딩이 없습니다.
하지만 당신이 하고 있는 일은 (SSH 터널을 통한) 포트 전달입니다!
따라서 이를 달성하려면 각 RPi에 서버에 자체 포트를 제공하는 대신(빠르게 혼란스러울 수 있음) 각 클라이언트가 고정 IP 주소를 갖는 내부 네트워크를 갖는 것이 직관적인 것처럼 보입니다. 공용 IP 네트워크를 통해 터널링됩니다. VPN!
그러면 클라이언트와 Raspberry Pi 사이에는 실질적인 차이가 없습니다. 둘 다 고정 공개 주소가 없는 VPN의 시스템일 뿐입니다.
요즘은 설정이 매우 쉽습니다. 관련된 모든 시스템에 wireguard 도구를 설치하고 각 시스템에 공개/개인 키 쌍을 생성하기만 하면 됩니다( wg genkey | tee private_key | wg public_key
).
각 클라이언트와 RP에 다음 내용이 포함된 구성 파일을 제공합니다.
[Interface]
PrivateKey = {Private key as generated on this machine}
# Pick an different individual address for each machine from the
# networks described below as allowed:
Address = 10.0.123.101, fd42:42:42:0:0101::
# ^^^ ^^^^^^
# Parts of the addresses to modify; I just randomly chose to
# give 10.0.123.101 – 10.0.123.199 to your RPis, and
# give 10.0.123.201 – 10.0.123.254 to your clients
DNS = {IP address of the DNS resolver to use}
[Peer]
PublicKey = {The public key from the server}
Endpoint = {The public IP address of the server}:{Port on the server}
# Allow addresses from the private networks:
# IPv4: 10.0.123.0
#through 10.0.123.255
#
# IPv6: fd00:1111:2222:1:0000:0000:0000:0000
#through fd00:1111:2222:1:ffff:ffff:ffff:ffff
AllowedIPs = 10.0.123.0/24,fd00:1111:2222:1::1/64
그리고 서버에서는 거의 동일하지만 모든 클라이언트 컴퓨터를 Peer
s로 나열합니다.
[Interface]
PrivateKey = {Private key as generated on this machine (the server)}
Address = 10.0.123.0, fd42:42:42:0::
DNS = {IP address of the DNS resolver to use}
[Peer]
PublicKey = {The public key from the 1. RPi}
AllowedIPs = 10.0.123.101/32, fd42:42:42:0:0101::/128
[Peer]
PublicKey = {The public key from the 2. RPi}
AllowedIPs = 10.0.123.102/32, fd42:42:42:0:0102::/128
# all the other RPis…
# … and all of the "clients":
[Peer]
PublicKey = {The public key from the 1. client}
AllowedIPs = 10.0.123.201/32, fd42:42:42:0:0201::/128
[Peer]
PublicKey = {The public key from the 2. client}
AllowedIPs = 10.0.123.202/32, fd42:42:42:0:0202::/128
# …
그렇습니다( /etc/wireguard/
예를 들어 이러한 구성 파일을 로 저장하고 wgvpn0.conf
이를 사용하여 활성화하십시오. systemctl enable --now wg-quick@wgvpn0
IPv4를 사용할지 v6을 사용할지에 따라 다릅니다) ssh 110.0.123.101
.