複数のNICとIPv4転送が有効なシンプルなLinuxルータがあります。
ルータには、1つのインターフェイス(eth0
、eth0:0
)に割り当てられた2つの固定WAN IPアドレスがあります。 (以下のテキストでは実際のパブリックIPアドレス(オクテットで257)を難読化しています。)
両方の外部WAN IPアドレスを外部インターネットからpingできます。
相互作用:
eth0
:インターネット接続、134.257.10。10/ 24、ゲートウェイ134.257.10.1eth0:0
:このインターフェイスの2番目のIPアドレス:134.257.10。20/二十四eth1
: LAN 1, 192.168.1.1/24eth2
: LAN 2, 192.168.2.1/24eth3
: 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
eth3
LAN3クライアント()を134.257.10としてマークする方法。20eth0:0
134.257.10以外のインターネット()からの接続を作成してください。10(eth0
)?
答え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 ではifconfig
1 つのインターフェイスで複数の IPv4 アドレスを処理できないため、この回避策はこの問題を克服するためのものです。実際、カーネルを含む134.257.10.20/24を除くすべてのeth0:0
エントリは、それをラベル設定に関連付けられたアドレスと見なします。この補助アドレスは、次のように最新のアドレスを使用して追加できます(既定のアドレスがすでに設定されている後)。ifconfig
eth0
eth0:0
ip 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