2012-11-23 34 views
1

我有一个关于具有两个网卡的Linux机器上的流量路由的问题。其中一个网卡的是在我们的DMZ网(10.1.9.0/24),另一种是在我们本地网(10.1.0.0./21):apache2 web代理服务器上的多个网卡

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)从我们的一个外部互联网地址获取流量。因此,在我们的主防火墙/路由器上存在NAT规则,将请求转换为10.1.9.25。这工作正常,请求被接受和回应。 在这种情况下,连接在eth1上建立,响应也在eth1上。

问题: 当我们想从我们的本地网络访问网络服务器时,防火墙将外部IP转换为DMZ ip。可以从本地网络内建立DMZ服务器的连接,但不能以其他方式建立连接。在这种情况下,连接从本地网络实例化为DMZ,但Web服务器无法响应。

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中的其他服务器工作正常,系统管理员在这里说网络配置是相同的。

任何人都可以帮助我诊断这个问题吗?

回答

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不能在同一个路由表中使用多个默认路由......想想看,如果你从ping通的外壳,它应该使用哪个界面4.2.2.2?

Linux Advanced Routing and Traffic Control Howto有一些技巧,你可以用它来实现多个路由表,但是这常常使事情复杂得多,你会希望保持。

最简单的解决方案是选择一个接口,您可以将所有内部公司网络聚合成一个超网,并为其分配一个路由...例如,此路由涵盖了所有不直接连接到该网络的10.xxx网络Linux机器......

route add -net 10.0.0.0 netmask 255.0.0.0 gw 10.1.0.132 

然后从eth0

+0

感谢默认为您输入迈克,我会尝试这个星期一,我不是跟物理服务器,你知道如何与路由搞乱可以完全如果你犯了一个错误,拿走主机的访问权限:-)不会忘记信用你! –

+0

嗨迈克。我试过你的解决方案,但它似乎没有任何区别。我的新路由表:http://pastebin.com/raw.php?i = fxk8eGg4 –