Ubuntuでパブリックおよびプライベートルーティングを設定する

Ubuntuでパブリックおよびプライベートルーティングを設定する

しばらくあれこれ探しても当たり前の答えがないようで、机に頭をぶつけて数日を過ごす前に聞いてみなければならないという気がしました。

2つの物理インターフェイスと1つの仮想インターフェイスを持つUbuntuボックスがあります。

  eno1 - 172.16.0.100
  eno2 - 172.16.0.101
eno1:0 - x.x.x.x

欲しいもの

  1. 着信パケットへの応答の場合、パケットは要求されたインターフェイスからパケットを送信したいと思います。
  2. 発信パケットの場合、基本的にパケットをエクスポートしたいと思います。

    ㅏ。 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

質問

  1. 場合によっては、サブネットの外部からeno1とeno2に接続できますが、eno1:0にはまったく接続できません。
  2. ボックスではインターネット(パブリック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は正しいポートで応答します。

男性!もう一度このことを忘れなかったらと思います!

おすすめ記事