私は NAT と iptables の初心者です。物理サーバーには CentOS 6 が稼働しており、KVM がインストールされています。さらに 2 つの Linux ボックスが VM (VM2 と VM3) として起動されており、それぞれの IP は 192.168.122.2 と 192.168.122.3 です。実際の IP は 1 つしかないため、NAT は外部リクエストを VM のアプリケーションにポート転送するために使用されます (例: ポート 30022 を VM3 の ssh (ポート 22) に転送)。セットアップ後はすべて正常に動作し、すでに 1 か月間稼働していますが、RAM をアップグレードしてサーバーを再起動すると、NAT/ポート転送が再び機能しなくなりました。
詳しくは:
- Iptables はホスト OS では実行されますが、ゲスト OS では実行されません。
- ホスト OS の iptables は NAT を次のように構成します。
ターゲット 利益 選択 ソース 宛先 DNAT tcp -- どこでもどこでも tcp dpt:30022 to:192.168.122.3:22 DNAT tcp -- どこでもどこでも tcp dpt:20022 to:192.168.122.2:22(22)
- コマンド iptables -t nat -L -v -n の結果:
パケット バイト ターゲット プロテクション オプトイン アウト ソース 宛先 6 304 LOG tcp -- br0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:30022 LOGフラグ0レベル4プレフィックスROUTE APP3 6 304 DNAT tcp -- br0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:30022 から:192.168.122.3:22 3 152 DNAT tcp -- br0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:20022 から:192.168.122.2:22
- つまり、ローカルPC(別のネットワーク)から30022にtelnetしようとしている間、パッケージはNATルールによって処理されます。
数日間苦労しています。何か助けはありますか?
答え1
を使用して、ホスト上で IP 転送が有効になっていることを確認する必要がありますcat /proc/sys/net/ipv4/ip_forward
。このコマンドは と出力します1
。有効になっていない場合は、 を使用して有効にする必要があります echo 1 > /proc/sys/net/ipv4/ip_forward
。