linux – 使用多宿主服务器丢弃IP流量

前端之家收集整理的这篇文章主要介绍了linux – 使用多宿主服务器丢弃IP流量前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
(在详细介绍之前,我以Apache和SSH为例说明了这个问题,但这并不是特定于TCP流量,而是基于TCP和UDP协议的问题.)

我有一个运行Ubuntu 9.04的多链路多宿主服务器,其中eth0连接到外部网络,eth1连接到内部网络.外部网络呈现给“世界其他地方”,内部网络包含所有开发人员工作站和主力服务器.有一个防火墙阻止从“世界其他地方”到内部网络的流量,但不阻止传出请求.

$/sbin/ifconfig
eth0  Link encap:Ethernet  HWaddr 00:30:18:a5:62:63  
      inet addr:xxx.yyy.159.36  Bcast:xxx.yyy.159.47  Mask:255.255.255.240
      [snip]

eth1  Link encap:Ethernet  HWaddr 00:02:b3:bd:03:29  
      inet addr:xxx.zzz.109.65  Bcast:xxx.zzz.109.255  Mask:255.255.255.0
      [snip]

$route -n 
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
xxx.yyy.159.32  0.0.0.0         255.255.255.240 U     0      0        0 eth0
xxx.zzz.109.0   0.0.0.0         255.255.255.0   U     0      0        0 eth1
0.0.0.0         xxx.yyy.159.33  0.0.0.0         UG    100    0        0 eth0

Apache正在侦听端口80,sshd正在侦听22:

$netstat --tcp -a
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 *:www                   *:*                     LISTEN     
tcp        0      0 *:ssh                   *:*                     LISTEN     
[snip]

从我在内部的开发机器xxx.zzz.109.40,我可以连接到内部地址,一切都很好.从外面我可以连接到外部地址,一切都像它应该的那样.

但是对于某些类型的测试,我想从我的开发机器连接到外部地址,但服务器拒绝连接请求.我猜它正在寻找它的路由表,因为传入的数据来自一个应该在eth1上的地址,但是它正在到达eth0,它正在丢弃它,可能是作为安全预防措施.

有没有办法可以放宽这个限制?

奇怪的是,这曾经在8.04上工作,但在8.10或9.04上不起作用,所以在去年的某个时候内核正在做一些额外的检查.为了使连接正常工作,返回路径需要与源路径相同,这意味着来自我的开发机器的消息到达eth0将不得不返回到eth0以便路由回我的机器.

这是一个图表,任何地方都没有NAT.

Diagram http://i25.tinypic.com/ff37yx.png

解决方法

假设您没有任何阻止此操作的iptables规则,则需要禁用返回路径过滤.你可以这样做:
# echo 0 > /proc/sys/net/ipv4/conf/all/rp_filter

您也可以使用特定的接口名称而不是全部,并且还有一个默认值,这将影响新创建的接口.

从:

reverse path filter; it is a check to see if,for a packet arriving on an interface,a packet sent to the original packet’s source address would be sent out on that interface; if not,the arriving packet is dropped. it can be considered an attempt at detecting packets with spoofed source addresses.

猜你在找的Linux相关文章