我有一个关于具有两个NIC的Linux机器上的流量路由的问题。其中一个NIC位于我们的DMZ网(10.1.9.0/24
)上,另一个位于我们的本地网(10.1.0.0./21
)上:
default via `10.1.4.1` dev eth0
default via `10.1.9.1` dev eth1 metric 100
`10.1.0.0/21` dev eth0 proto kernel scope link src `10.1.0.132`
`10.1.9.0/24` dev eth1 proto kernel scope link src `10.1.9.25`
我们将服务器用作Web代理。 dmz接口(eth1)从我们的一个外部Internet地址获取流量。因此,我们的主防火墙/路由器上存在NAT规则,可将请求转换为10.1.9.25
。这工作正常,请求被接受和响应。
在这种情况下,连接建立在eth1上,响应也在eth1上。
问题: 当我们想从本地网络内部访问网络服务器时,防火墙会将外部IP转换为DMZ ip。可以从我们的本地网络中建立与DMZ服务器的连接,但不是相反。在这种情况下,连接从本地网络实例化到DMZ,但是网络服务器没有响应。
sudo tcpdump -i eth1 port 443 and src host 10.1.1.154
10:09:35.626450 IP 10.1.1.154.48870 > 10.1.9.25.https: Flags [S], seq 2491947547, win 14600, options [mss 1460,sackOK,TS val 2066949 ecr 0,nop,wscale 4], length 0
10:09:35.825619 IP 10.1.1.154.48871 > 10.1.9.25.https: Flags [S], seq 1827990665, win 14600, options [mss 1460,sackOK,TS val 2067011 ecr 0,nop,wscale 4], length 0
10:09:36.575239 IP 10.1.1.154.48870 > 10.1.9.25.https: Flags [S], seq 2491947547, win 14600, options [mss 1460,sackOK,TS val 2067199 ecr 0,nop,wscale 4], length 0
10:09:36.823264 IP 10.1.1.154.48871 > 10.1.9.25.https: Flags [S], seq 1827990665, win 14600, options [mss 1460,sackOK,TS val 2067261 ecr 0,nop,wscale 4], length 0
10:09:38.579373 IP 10.1.1.154.48870 > 10.1.9.25.https: Flags [S], seq 2491947547, win 14600, options [mss 1460,sackOK,TS val 2067700 ecr 0,nop,wscale 4], length 0
10:09:38.827290 IP 10.1.1.154.48871 > 10.1.9.25.https: Flags [S], seq 1827990665, win 14600, options [mss 1460,sackOK,TS val 2067762 ecr 0,nop,wscale 4], length 0
SSH是相同的,接口接收连接,但不响应。我不确定问题的确切位置(在服务器上或防火墙/路由器上)。我们在DMZ中有其他服务器工作正常,这里的sysadmin表示网络配置是相同的。
有人可以帮我诊断这个问题吗?
答案 0 :(得分:0)
你的问题在这里
default via `10.1.4.1` dev eth0
default via `10.1.9.1` dev eth1 metric 100
`10.1.0.0/21` dev eth0 proto kernel scope link src `10.1.0.132`
`10.1.9.0/24` dev eth1 proto kernel scope link src `10.1.9.25`
IP不能在同一个路由表中使用多个默认路由...想一想,如果从shell ping 4.2.2.2,它应该使用哪个接口?
Linux Advanced Routing and Traffic Control Howto有一些技巧可以用来实现多个路由表,但这往往会使事情变得比你想要维护的更复杂。
最简单的解决方案是选择一个接口,您可以将所有内部公司网络聚合到一个超网中并为其分配路由...例如,此路由涵盖所有未直接连接到Linux的10.xxx网络机...
route add -net 10.0.0.0 netmask 255.0.0.0 gw 10.1.0.132
然后从eth0