私はGentoo Linuxを実行しているので、通常のiptbalesを使用してファイアウォールとネットワークを管理します。私は通常、すべてのトラフィックにwan0を使用していますが、すでにWebサーバーがあるので、wan1(別のドメインにバインドされている)を2番目のWebサーバーとして使用したいと思います。
3つのインターフェースがあります。
- eth0=LAN
- wan0 =使用されているデフォルトのWAN(デフォルトゲートウェイ)
- wan1 = セカンダリ WAN
ゲートウェイに関する情報
> route -n
Kernel IP Routentabelle
Ziel Router Genmask Flags Metric Ref Use Iface
0.0.0.0 80.108.x.x 0.0.0.0 UG 0 0 0 wan0
192.168.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth0
80.108.x.0 0.0.0.0 255.255.254.0 U 0 0 0 wan0
84.114.y.0 0.0.0.0 255.255.255.0 U 0 0 0 wan1
127.0.0.0 127.0.0.1 255.0.0.0 UG 0 0 0 lo
NAT/MASQUEARDINGの基本初期化は次のとおりです。
sysctl -q -w net.ipv4.conf.all.forwarding=1
iptables -N BLOCK
iptables -A BLOCK -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A BLOCK -m state --state NEW,ESTABLISHED -i eth0 -j ACCEPT
iptables -A BLOCK -m state --state NEW,ESTABLISHED -i lo -j ACCEPT
iptables -t nat -A POSTROUTING -o eth0 -s 192.168.0.0/16 -j MASQUERADE
iptables -t nat -A POSTROUTING -o wan0 -j MASQUERADE
iptables -t nat -A POSTROUTING -o wan1 -j MASQUERADE
このゲートウェイの後ろには、複数のWebサーバーが実行されます。あるコンピュータでは、80ではなくポート8000でHTTPサーバーを実行します。通常、wan0 を受信インターフェイスとして使用する場合は、次の規則を使用します。
lan_host1="192.168.0.200"
iptables -A FORWARD -i wan0 -p TCP -d $lan_host1--dport 80 -j ACCEPT
iptables -t nat -A PREROUTING -i wan0 -p TCP --dport 8000 -j DNAT --to-destination "$lan_host1":80
iptables -A FORWARD -i wan0 -p UDP -d $lan_host1--dport 80 -j ACCEPT
iptables -t nat -A PREROUTING -i wan0 -p UDP --dport 8000 -j DNAT --to-destination "$lan_host1":80
良い結果。今、wan0は私が通常他の目的に使用するIP /ドメインにバインドされているので、wan1を使用したいと思います。
私はwan1を単に変更すると問題が解決すると思います。
lan_host1="192.168.0.200"
iptables -A FORWARD -i wan1 -p TCP -d $lan_host1--dport 80 -j ACCEPT
iptables -t nat -A PREROUTING -i wan1 -p TCP --dport 8000 -j DNAT --to-destination "$lan_host1":80
iptables -A FORWARD -i wan1 -p UDP -d $lan_host1--dport 80 -j ACCEPT
iptables -t nat -A PREROUTING -i wan1 -p UDP --dport 8000 -j DNAT --to-destination "$lan_host1":80
しかし、これはうまくいきません。問題は、wan0がデフォルトのGWであることです。したがって、wan1が受信したパケットはlan_host1に転送されますが、ゲートウェイに再送信されると、wan1の代わりにwan0を介して送信されるか、少なくともwan0のIPを使用して送信されると推測されます。
この問題をどのように処理できるかを提案できますか?
よろしくお願いします、ロブ
答え1
答えは構成に関連しているので、いくつかの仮定をしました。実際の構成に合わせて回答を調整する必要があります。
ベイ1LANとゲートウェイベイ1任意選択は84.114.7.0/24および84.114.7.254です。
ファイアウォールルールは考慮されませんが、これらのいずれもファイアウォールルールと対話してはいけません。
Linuxでip link
、ip address
そしてip route
ifconfig
廃止予定のsumの代わりに常に使用する必要がありますroute
。route
それにもかかわらず、追加のルーティングテーブルは処理されない可能性があります。
参考までに、iptablesまたは実際にWebフィルタ、ルーティングすることはありませんが、その操作を使用して、IPルーティングスタックによって行われたルーティング決定を変更できます。これ模式図ルーティング決定が発生する可能性がある場所を示します。ローカルで発生せず、1 か所でのみルーティングされるトラフィックの場合、変更は次のように発生する必要があります。ソース/事前ルーティング、マングル/事前ルーティングまたはnat/プリルートと生のしばしば非実用的であり、ナット制限された場合にのみ機能し、ほとんどの場合終了します。壊す。
ㅏ基本マルチホスティングシステム、複数のインターネットパスを使用するには、通常、次のものが必要です。ポリシールーティングここで、パスは通常どおり、ターゲットだけでなく、ポリシールールで使用されるソースまたは他のセレクタによって異なります(ここで実行されます)。 Linuxでは、次のコマンドを使用して追加のルールを作成します。ip rule
たとえば、別のデフォルトルートを選択するために別のルーティングテーブルを選択できます(まだ1つのデフォルトパスしかありません。ルーティングテーブルごと)。
ここでの原則は、まだアクティブな状態を維持することです。厳格なリバースパスの転送(rp_フィルタ)は、以下からパケットを受け入れることです。ベイ1そして彼らに次のことを指示してくださいイーサネット0代替テーブルを使用してください(これを行うと通過できます)。rp_フィルタ)。この追加のルートテーブルはプライマリルートテーブルを複製する必要がありますが、代替ルート(ベイ1)、したがって「一般」パスを持つ通常のパスは含まれません(ウォン0)。通過するトラフィックに別のルート(VPNなど)を含める必要がある場合ベイ1、ほとんどの場合、そのパスも追加する必要があります。または、この状況を処理するために別の追加のルールとテーブルを作成する必要があります。
Linuxはカーネル3.6のパスキャッシュを使用しなくなったため、ルーティングスタックにはホスト1顧客に渡すベイ1最終的にはデフォルトのデフォルトパスを使用します。ウォン0、インターフェイスのNATに無効なIPを使用する(Webフィルタルーティングとは何の関係もなく、接続の最初のパケットが受信されたときに実行するNATがすでに選択されています。一つあるWebフィルタconntrack マーカーのパケットマーカーをコピーしてパケットに戻す機能を許可します。これは接続のためのパスメモリとして機能します。だからiptablesそしてWebフィルタ~のつながるルーティング決定を変更するためにパケットを表示し、同じ接続の一部として識別された応答パケットからこの指示を復元する2つの関連機能に使用されます。
これらはすべて次のコマンドに変換されます。
- ルーティング部分
タグ付きパケット(任意のタグ値101)の場合は、追加のルーティングテーブルを使用します(無関係のランダム値も101)。
ip rule add fwmark 101 lookup 101
同様の項目でテーブルを埋める基本ルーティングテーブル、減算ウォン0記入:
ip route add table 101 192.168.0.0/16 dev eth0
ip route add table 101 84.114.7.0/24 dev wan1
ip route add table 101 default via 84.114.7.254 dev wan1
- iptables/Webフィルタ部分
次のコマンドはさまざまな最適化を可能にし、まだ改善できます。
保存された古いタグを復元すると、応答パケットは元のパケットと同じタグを持ちます。
iptables -t mangle -A PREROUTING -j CONNMARK --restore-mark
次のパケットを表示ベイ1上記のルーティング決定を変更します。
iptables -t mangle -A PREROUTING -i wan1 -j MARK --set-mark 101
タグがある場合は保存してください。つながる(次にいたかもしれません。ナットテーブルはパケットごとではなく接続フローごとに一度だけ実行されます。
iptables -t mangle -A PREROUTING -m mark ! --mark 0 -j CONNMARK --save-mark
実際、これはまだ失敗するでしょう厳格なリバースパスの転送このため確認してください文書化されていない機能2010年に追加されました。ここで使用する必要があります:
sysctl -w net.ipv4.conf.wan1.src_valid_mark=1