すべてのhttpトラフィックをAmazonEC2ストックLinuxマシン(CentOSベース)の別のIPアドレスに転送したいと考えています。私はプロキシルールとApacheでこれを行う方法を知っていますが、iptablesがはるかに高速なソリューションになると思っていました(おそらくそうではありません!)
コマンド
Sudo iptables -P INPUT ACCEPT Sudo iptables -F Sudo iptables -A PREROUTING -t nat -p tcp -i eth0 --dport 80 -j DNAT --to 208.68 .208.81:80 Sudo iptables -A FORWARD -p tcp -d 208.68.208.81 --dport 80 -j ACCEPT
iptables -t nat -L -v -n
チェーンPREROUTING(ポリシーACCEPT 0パケット、0バイト) pktsバイトターゲットプロトアウトソースソース宛先 0 0 DNAT tcp-eth0 * 0.0.0.0/0 0.0。 0.0/0 tcp dpt:80 to:208.68.208.81:80 Chain INPUT(policy ACCEPT 0 packet、0 bytes) pkts bytes target prot opt in out source destination Chain OUTPUT(policy ACCEPT 11 packet、820 bytes) pkts bytes target prot opt in out source destination Chain POSTROUTING(policy ACCEPT 11パケット、820バイト) pktsバイトターゲットプロトオプトインソースの宛先
iptables -L -v -n
チェーンINPUT(ポリシーACCEPT 202パケット、15705バイト) pktsバイトターゲットプロトインアウトソース宛先 チェーンFORWARD(ポリシーACCEPT 0パケット、0バイト) pkts bytes target prot opt in out source destination 0 0 ACCEPT tcp- * * 0.0.0.0/0 208.68.208.81 tcp dpt:80 チェーン出力(ポリシーACCEPT 145パケット、13747バイト) pktsバイトターゲットprotオプトインソース宛先
http://208.68.208.81 Webブラウザーへのアクセスは機能しますが、この設定でEC2マシンのIPアドレスを試すと、タイムアウトが発生します。いくつかのパケットがwatch -d iptables -t nat -L -v -n
で表示されます
助けて!
更新:-i eth0
をPREROUTINGルールに追加
私が目にする潜在的な問題は3つあります(他の回答とは対照的に、編集されていないバージョンの質問でも「ループ」を引き起こすものは何も見当たりません)。
DNATに加えてSNATまたはMASQURADEルールを使用することで、ポイント2および3を回避できますが、これを行うと、トラフィックの元のソースIPが失われます。それは虐待のコントロールを非常に難しくします。
ポイント2と3のもう1つの解決策は、2つのサーバー間にVPNを設定することです。次に、DNATを使用してVPNおよびソースIPベースのルーティングを介してトラフィックを転送し、応答をNATに戻します。
ループを作成しました。必ずinインターフェースをPREROUTING
ルールに追加してください(例:-i eth1
または何か)。
次のようなルールも必要になる場合があります。
Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
45M 3723M MASQUERADE all -- * WAN_IF 0.0.0.0/0 0.0.0.0/0
それ以外の場合、パケットは転送されたマシンから直接クライアントに返されますが、そのホストからのパケットは期待されていません。
Rinetdを使用して、ipトラフィックを単純に転送できます。