한 장치에서 다른 네트워크의 다른 장치로 포트 전달

한 장치에서 다른 네트워크의 다른 장치로 포트 전달

내 네트워크 설정은 3대의 컴퓨터(장치 A, B, C)로 구성되어 있습니다. 장치 A, B, C는 스위치를 사용하여 이더넷을 통해 연결됩니다. 장치 A만 인터넷에 액세스할 수 있습니다(Wi-Fi 라우터, 포트 8000-8002로 전달됨).

장치 A, B, C가 HTTP 서버를 실행하고 있고 장치 D(인터넷에 있는 컴퓨터)에서 해당 서버에 액세스하려고 한다고 가정합니다. 그러나 장치 D는 장치 A를 통해서만 B와 C에 액세스할 수 있으므로 일부 포트 마법이 필요합니다.

다음과 같은 주소와 제목이 있다고 가정해 보겠습니다.

Device A: 
  192.168.5.100 (wlan0)  
  10.42.0.1 (eth0)
  server on port 80
Device B:
  10.42.0.2 (eth0)
  server on port 80
Device C:
  10.42.0.3 (eth0)
  server on port 80
Device D:
  somewhere on the Internet

어떻게 전달합니까?

Device D -> 192.168.5.100:8000 (A) -> 10.42.0.1:80 (A)
Device D -> 192.168.5.100:8001 (A) -> 10.42.0.2:80 (B)
Device D -> 192.168.5.100:8002 (A) -> 10.42.0.3:80 (C)

나는 다음과 같은 다른 명령을 사용하여 iptables를 사용해 보았습니다.

sudo iptables -t nat -A PREROUTING -p tcp --dport {from_port} -j DNAT --to-destination {to_ip}:{to_port}
sudo iptables -t nat -A POSTROUTING -d {to_ip} -p tcp --dport {to_port} -j SNAT --to-source {from_ip}

어디

from_ip is 192.168.5.100
from_port is either 8000, 8001, or 8002
to_ip is either 10.42.0.1, 10.42.0.2, or 10.42.0.3
to_port is 80

그러나 나는 성공하지 못했습니다.

명령에 문제가 있습니까? 아니면 iptables를 사용하는 것보다 더 나은 대안이 있습니까? 도움이 된다면 3대의 컴퓨터 모두에 물리적으로 액세스할 수 있지만 장치 A에는 그래픽 인터페이스가 없습니다. 장치 A와 B는 항상 Linux에 있는 반면, 장치 C는 때때로 Windows에 있고 때로는 Linux에 있습니다.

답변1

# Enable routing
sudo echo 1 > /proc/sys/net/ipv4/ip_forward
# Forward specific ports to specific destinations
sudo iptables -t nat -A PREROUTING -p tcp -i wlan0 --dport 8000 -j DNAT --to-destination 10.42.0.1:80
sudo iptables -t nat -A PREROUTING -p tcp -i wlan0--dport 8001 -j DNAT --to-destination 10.42.0.2:80
sudo iptables -t nat -A PREROUTING -p tcp -i wlan0 --dport 8002 -j DNAT --to-destination 10.42.0.3:80
# Enable NAT (aka Masqurade)
sudo iptables -t nat -A POSTROUTING -j MASQUERADE

관련 정보