
我已經環顧了一段時間,似乎找不到一個好的答案,所以我想我應該先問一下,然後再花幾天時間把頭撞在桌子上。
我有一個 Ubuntu 盒子,有兩個實體介面和一個虛擬介面。
eno1 - 172.16.0.100
eno2 - 172.16.0.101
eno1:0 - x.x.x.x
我想得到什麼
- 對於對傳入資料包的回應,我希望資料包在其請求傳入的介面上發出。
對於傳出資料包,我希望它們預設發出...
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
問題
- 我可以偶爾從子網之外的範圍到達 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 都在其正確的連接埠上做出回應。
男人!我希望我不會再忘記這一點!