%20%E3%82%92%E8%A1%8C%E3%81%86%E3%81%AB%E3%81%AF%E3%81%A9%E3%81%86%E3%81%99%E3%82%8C%E3%81%B0%E3%81%84%E3%81%84%E3%81%A7%E3%81%99%E3%81%8B%3F.png)
私は GNS3 サーバーを所有しており、チームの誰かがポート 1100 で接続すると、192.168.122.2:22 などの内部 IP にルーティングされるように iptable ルールを追加しようとしています。この内部 IP は、GNS3 プロジェクトの要塞ホストに属しています。最終目標は、ローカル マシンから内部 IP アドレスに shh できるようにすることです。
私の IPTABLE は次のようになります (例として偽のパブリック IP 1.2.3.4 を使用しています)。
Chain PREROUTING (policy ACCEPT)
num target prot opt source destination
1 DNAT tcp -- 0.0.0.0/0 1.2.3.4 tcp dpt:1100 to:192.168.122.2:22
Chain INPUT (policy ACCEPT)
num target prot opt source destination
Chain OUTPUT (policy ACCEPT)
num target prot opt source destination
Chain POSTROUTING (policy ACCEPT)
num target prot opt source destination
1 MASQUERADE all -- 0.0.0.0/0 0.0.0.0/0
Chain DOCKER (0 references)
num target prot opt source destination
Chain LIBVIRT_PRT (0 references)
num target prot opt source destination
ローカルマシンから、コマンドを実行します。Ubuntu は、GNS3 プロジェクトの内部 IP にアクセスするために必要なユーザー名です。ssh [email protected] -p1100
このコマンドを実行すると、GNS3 サーバー (1.2.3.4) で次の出力が得られます。
cloud@gns3:~$ connect_to 192.168.122.2 port 1100: failed.
SSH コマンドが GNS3 サーバーに到達し、ポート転送を試行しているようです。しかし、何らかの理由でポート 22 ではなくポート 1100 に転送しようとしています。その理由を特定できる人はいますか?
これまで私が試したことは次のとおりです:
- ipv4ポート転送を1に設定する
- GatewayPortsとAllowTcpForwardingを1に設定する
- ローカルマシンで実行されました(これによりサーバー上のいくつかの構成が変更されたと思います) -
ssh -R 1.2.3.4:1100:192.168.122.2:22 [email protected]
- コマンドを使用してIPtablesにルールを追加
sudo iptables --table nat --append PREROUTING --protocol tcp --destination 1.2.3.4 --dport 1100 --jump DNAT --to-destination 192.168.122.2:22
- マスカレードも追加されました:
sudo /sbin/iptables -t nat -A POSTROUTING -j MASQUERADE
答え1
このソースによると、DNAT を使用する代わりに、REDIRECT を使用する必要があります。
それで:
sudo iptables --table nat --append PREROUTING --protocol tcp --destination 1.2.3.4 --dport 1100 --jump REDIRECT --to-destination 192.168.122.2:22