インターネット上のサーバーへの永続的な静的GREトンネルを持つホストがあります。現在、ホストには独自の実際のIPアドレスがあります。ホストをLinuxボックス(Smoothwall)の後ろに置き、プライベートIPアドレスを割り当てたいと思います。
呼び出しましょう:
tunnel-server-ip =ホストが(インターネット上で)接続しているトンネルの端のIP
real-ip = Linuxルーターに割り当てたいホストが現在使用している実際のIP
false-ip = Linuxファイアウォールの背後に配置された後にホストが取得するIP
これは、トンネルが機能するために私がしなければならないと思うことです。
私は次のスクリプトを思いついた:
tunnel_server_ip=217.x.x.x
false_ip=192.168.2.2
real_ip=82.x.x.x
/sbin/iptables -A PREROUTING -p 47 --src $tunnel_server_ip -j DNAT --to-destination $false_ip
/sbin/iptables -A POSTROUTING -p 47 --src $false_ip -j SNAT --to-source $real_ip
/sbin/iptables -A INPUT -p 47 -j ACCEPT
これを実行すると、その名前のチェーン/ターゲット/一致がなくなります。私が間違ったことを教えてください。私は正しい方向に進んでいますか?
PREROUTING/POSTROUTING命令の-t nat
テーブルスイッチを忘れました。前面に追加するだけです。
遅い答えですが、私は同じニーズに遭遇し、次の2つのコマンドでうまくいきます。
# iptables -t nat -A PREROUTING -i eth0 -p gre -j DNAT --to-destination 192.168.0.1
# modprobe nf_conntrack_proto_gre
実際のIPを指定する必要はありません。プライベートサーバーへのPREROUTE
トラフィックをgre
し、gre
接続トラッカーにその仕事を任せます。
ほとんどのGREトンネルでは、TCP 1723に制御プロトコルが必要です。これも転送する必要があります。これは Link で、このためのiptables構成を説明しています。制御プロトコルが欠落しているだけで、正しい方向に進んでいます。
「--tablenat」と言うのを忘れたようです。そのため、SNAT/DNATターゲットがなく、PREROUTINGチェーンとPOSTROUTINGチェーンもないフィルターテーブルに入ります。