我已经环顾了一段时间,似乎找不到一个好的答案,所以我想我应该先问一下,然后再花几天时间把头撞在桌子上。
我有一个 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 都在其正确的端口上做出响应。
男人!我希望我不会再忘记这一点!