私のネットワーク設定は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