
私は 2 つの VM を持っています。1 つはプライベート IP アドレス (NAT の背後)、もう 1 つはパブリック IP アドレスです。NAT を使用して SSH トンネルを作成しました。目標は、パブリック VM を NAT の背後のネットワークに接続し、それを介してトラフィックを転送することです。ポイントは、このネットワークで実行されるアプリケーションを、パブリック サーバー上の同様のアプリケーションで偽装することです (テスト目的)。
そこで私は次のようなものを作りました:
トンネルを有効にする
sudo ssh [email protected] -w 0:0
アドレッシング
ifconfig tun0 10.253.253.1/30 pointopoint 10.253.253.2 - Local
ifconfig tun0 10.253.253.2/30 pointopoint 10.253.253.1 - Remote
内部ネットワークへのルートの追加
ip route add 10.0.3.0/24 via 10.253.253.1
双方向通信用(これについてはよく分かりません)
sudo arp -sD 10.253.253.1 ens18 pub
ローカルでのポート転送
sudo sysctl -w net.ipv4.ip_forward=1
sudo iptables -I FORWARD 1 -s 10.253.253.1 -j ACCEPT
sudo iptables -I FORWARD 1 -d 10.253.253.1 -j ACCEPT
sudo iptables -t nat -A POSTROUTING -s 10.253.253.1 -j MASQUERADE
そして実際、これはほぼ機能しています。ローカル ホストでアプリケーション サービスをオフにすると、リモート ホストにトラフィックが転送されます。ただし、大きな問題があります。このローカル サーバーはポート 4660 で要求を送信し、他の (内部アプリケーション) はポート 4661 で応答します。ポート 4661 のすべての着信トラフィックをポート 4660 へのトンネル インターフェイスに転送するための追加ルールが必要なようです。これをどのように処理しますか? 私は iptables にあまり詳しくありませんが、次のようなことを試しましたが、うまくいきませんでした。
iptables -A PREROUTING -t nat -i eth0 -p udp --dport 4661 -j DNAT --to 10.253.253.1:4660
iptables -A FORWARD -p udp -d 10.253.253.1 --dport 4660 -j ACCEPT
答え1
はい、動作させました:
iptables -A PREROUTING -t nat -i eth0 -p udp --dport 4661 -j DNAT --to 10.253.253.2:4661(remote tun address)