web-dev-qa-db-ja.com

iptablesを使用してhttpトラフィックを別のIPアドレスに転送する

すべての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ルールに追加

6
Lightbeard

私が目にする潜在的な問題は3つあります(他の回答とは対照的に、編集されていないバージョンの質問でも「ループ」を引き起こすものは何も見当たりません)。

  1. IP転送を有効にする必要があります。
  2. NATされてネットワークに戻された後、パケットはスプーフィングされたパケットに非常によく似ているため、送信元アドレスフィルタリングの犠牲になる可能性があります。
  3. NATを通過するパケットへの応答は、同じNATを通過する必要があるため、逆変換を実行できます。そうしないと、クライアントは間違った応答を受け取ります。ドロップする可能性のある送信元IP /ポート(リバースパスフィルタリングによってまだドロップされていない場合)。

DNATに加えてSNATまたはMASQURADEルールを使用することで、ポイント2および3を回避できますが、これを行うと、トラフィックの元のソースIPが失われます。それは虐待のコントロールを非常に難しくします。

ポイント2と3のもう1つの解決策は、2つのサーバー間にVPNを設定することです。次に、DNATを使用してVPNおよびソースIPベースのルーティングを介してトラフィックを転送し、応答をNATに戻します。

4
Peter Green

ループを作成しました。必ず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  

それ以外の場合、パケットは転送されたマシンから直接クライアントに返されますが、そのホストからのパケットは期待されていません。

1
Falcon Momot

Rinetdを使用して、ipトラフィックを単純に転送できます。

1
zfou