しばらくあれこれ探しても当たり前の答えがないようで、机に頭をぶつけて数日を過ごす前に聞いてみなければならないという気がしました。
2つの物理インターフェイスと1つの仮想インターフェイスを持つUbuntuボックスがあります。
eno1 - 172.16.0.100
eno2 - 172.16.0.101
eno1:0 - x.x.x.x
欲しいもの
- 着信パケットへの応答の場合、パケットは要求されたインターフェイスからパケットを送信したいと思います。
発信パケットの場合、基本的にパケットをエクスポートしたいと思います。
ㅏ。 eno1 - プライベートネットワーク(複数の非連続172.16.x.0の範囲)に向かうパケットの場合eno1:0 - 他のすべてのネットワークに向かうパケットの場合
現在の設定
IPルールのリスト
0: from all lookup local
32760: from all to x.x.x.x lookup eno1:0
32761: from x.x.x.x lookup eno1:0
32762: from all to 172.16.0.101 lookup eno2
32763: from 172.16.0.101 lookup eno2
32764: from all to 172.16.0.100 lookup eno1
32765: from 172.16.0.100 lookup eno1
32766: from all lookup main
32767: from all lookup default
IPルーティングリストテーブルeno1:0
default via x.x.x.1 dev eno1
IPルーティングリストテーブルeno1
default via 172.16.0.1 dev eno1
172.16.0.0/24 dev eno1 scope link src 172.16.0.100
IPルーティングテーブルeno2
default via 172.16.0.1 dev eno2
172.16.0.0/24 dev eno2 scope link src 172.16.0.101
IPルーティングリスト
default via 172.16.0.1 dev eno1 onlink
x.x.x.0/23 dev eno1 proto kernel scope link src x.x.x.x
172.16.0.0/24 dev eno2 proto kernel scope link src 172.16.0.101
172.16.0.0/24 dev eno1 proto kernel scope link src 172.16.0.100
eno1とeno2のsysctl値
arp_filter=1
arp_ignore=1
arp_announce=2
質問
- 場合によっては、サブネットの外部からeno1とeno2に接続できますが、eno1:0にはまったく接続できません。
- ボックスではインターネット(パブリックIP)にはまったくアクセスできません。
ベストアンサー1
答えが見つかりました。いいえ、むしろ再発見されました…
問題は、Unixがホストをポートではなくネットワークエンティティと見なしているため、マルチホームサーバーであらゆる種類のARP問題が発生することです。したがって、デフォルトでは、インターフェイスのarp応答をそのインターフェイスに関連付けられているIPアドレスに制限する必要があります。それ以外の場合、UnixはIPに関係なくすべてのインターフェイスに応答します。これは実際にはサブネット内の他のすべてのデバイスを混乱させます。
だから... arptablesのインストール
sudo apt-get -y install arptables
各インターフェイスの応答をそのインターフェイスのIPに制限します。
sudo arptables -n -v --line-numbers -L
Chain INPUT (policy DROP 6011K packets, 168M bytes)
1 -j ACCEPT -i eno1 -o * -d x.x.x.x , pcnt=2496 -- bcnt=69888
2 -j ACCEPT -i eno1 -o * -d 172.16.0.100 , pcnt=294 -- bcnt=8232
3 -j ACCEPT -i eno2 -o * -d 172.16.0.101 , pcnt=294 -- bcnt=8232
Chain OUTPUT (policy DROP 0 packets, 0 bytes)
1 -j ACCEPT -i * -o eno1 -s x.x.x.x , pcnt=2503 -- bcnt=70084
2 -j ACCEPT -i * -o eno1 -s 172.16.0.100 , pcnt=295 -- bcnt=8260
3 -j ACCEPT -i * -o eno2 -s 172.16.0.101 , pcnt=294 -- bcnt=8232
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
見て、すべてのIPは正しいポートで応答します。
男性!もう一度このことを忘れなかったらと思います!