2つの外部WAN IP A + Bと複数の内部LANを持つNATルータ:1つのLANは外部IPアドレスBを使用し、他のすべてのAはAを使用します。

2つの外部WAN IP A + Bと複数の内部LANを持つNATルータ:1つのLANは外部IPアドレスBを使用し、他のすべてのAはAを使用します。

複数のNICとIPv4転送が有効なシンプルなLinuxルータがあります。

ルータには、1つのインターフェイス(eth0eth0:0)に割り当てられた2つの固定WAN IPアドレスがあります。 (以下のテキストでは実際のパブリックIPアドレス(オクテットで257)を難読化しています。)

両方の外部WAN IPアドレスを外部インターネットからpingできます。

相互作用:

  • eth0:インターネット接続、134.257.10。10/ 24、ゲートウェイ134.257.10.1
  • eth0:0:このインターフェイスの2番目のIPアドレス:134.257.10。20/二十四
  • eth1: LAN 1, 192.168.1.1/24
  • eth2: LAN 2, 192.168.2.1/24
  • eth3: LAN 3、192.168.3.1/24

私の設定が機能すると、すべてのLANクライアント(LAN 1-3)がインターネットにアクセスでき、外部から134.257.10として表示されることがあります。10。また、2 つの受信ポートが転送されました。

私のiptables NATテーブルは次のとおりです。

*nat
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
# Port forwarding:
-A PREROUTING -i eth0 -p tcp -m tcp --dport 80 -j DNAT --to-destination 192.168.1.10:80
-A PREROUTING -i eth0:0 -p tcp -m tcp --dport 25 -j DNAT --to-destination 192.168.3.33:25
-A POSTROUTING -o eth0 -j MASQUERADE
COMMIT

eth3LAN3クライアント()を134.257.10としてマークする方法。20eth0:0134.257.10以外のインターネット()からの接続を作成してください。10eth0)?

答え1

MASQUERADEの代わりにSNATを使用する

...デフォルト以外のものを選択します。

一般的な場合(他のすべてのLAN)にはMASQUERADEを使用しないでください。LAN3クライアントにはSNAT例外を追加してください。これをオーバーライドするには、他のnat / POSTROUTINGルールよりも前に一致する必要があるため、既存のルールセットの正しい場所に適用する-Iのではなく、以下で使用されます-A(偽257を参照)。

iptables -t nat -I POSTROUTING -s 192.168.3.0/24 -o eth0 -j SNAT --to-source 134.257.10.20

iptables(逆にnftables)一致できません入力するPOSTROUTING フックでパケットがルーティングされるインターフェイスなので、上記では-i eth3使用できませんが、代わりに元の IP アドレス ソースをチェックして一致が行われます。


問題を解くeth0:0

ifconfigこのプロセスでは、20年以上Linuxで使用されていないが、まだ存在するLinuxコマンドとの互換性のためにのみ存在する概念である、いわゆるエイリアスインタフェース名の誤った使用を修正します。実際、Linux ではifconfig1 つのインターフェイスで複数の IPv4 アドレスを処理できないため、この回避策はこの問題を克服するためのものです。実際、カーネルを含む134.257.10.20/24を除くすべてのeth0:0エントリは、それをラベル設定に関連付けられたアドレスと見なします。この補助アドレスは、次のように最新のアドレスを使用して追加できます(既定のアドレスがすでに設定されている後)。ifconfigeth0eth0:0ip addr

ip addr add 134.257.10.20/24 brd + label eth0:0 dev eth0 

これが重要な理由はiptables使用されたルールと正確に一致しませんeth0:0。したがって、短期間で交換する必要があります。iptablesインターフェイスの確認:eth0同じルールにIPアドレス解決を追加します。

したがって、ポート 80 が両方の代わりに最初のパブリック IP アドレスに対して 192.168.1.10:80 にのみ到達した場合は、次のように置き換えます。

-A PREROUTING -i eth0 -p tcp -m tcp --dport 80 -j DNAT --to-destination 192.168.1.10:80

そして:

-A PREROUTING -i eth0 -d 134.257.10.10 -p tcp -m tcp --dport 80 -j DNAT --to-destination 192.168.1.10:80

両方のアドレスが適用される場合、初期ルールは問題ありません。

ただし、ポート25の規則は次のように書き直す必要があります。

-A PREROUTING -i eth0 -d 134.257.10.20 -p tcp -m tcp --dport 25 -j DNAT --to-destination 192.168.3.33:25

実際のインターフェースで一致する必要があります(eth0そしてeth0:0アドレスはインターフェイスではなくアドレスであるためです。

最終ルールセットは次のとおりです(もちろん、偽の257に注意してください)。

*nat
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
-A PREROUTING -d 134.257.10.10/32 -i eth0 -p tcp -m tcp --dport 80 -j DNAT --to-destination 192.168.1.10:80
-A PREROUTING -d 134.257.10.20/32 -i eth0 -p tcp -m tcp --dport 25 -j DNAT --to-destination 192.168.3.33:25
-A POSTROUTING -s 192.168.3.0/24 -o eth0 -j SNAT --to-source 134.257.10.20
-A POSTROUTING -o eth0 -j MASQUERADE
COMMIT

関連情報