在 Ubuntu 上設定公用路由和私有路由

在 Ubuntu 上設定公用路由和私有路由

我已經環顧了一段時間,似乎找不到一個好的答案,所以我想我應該先問一下,然後再花幾天時間把頭撞在桌子上。

我有一個 Ubuntu 盒子,有兩個實體介面和一個虛擬介面。

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

我想得到什麼

  1. 對於對傳入資料包的回應,我希望資料包在其請求傳入的介面上發出。
  2. 對於傳出資料包,我希望它們預設發出...

    A。 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 都在其正確的連接埠上做出回應。

男人!我希望我不會再忘記這一點!

相關內容