基于Linux端口的路由使用iptables / ip路由

我有以下设置:

192.168.0.4 192.168.0.6 192.168.0.1 +-----------+ +---------+ +----------+ |WORKSTATION|------| LINUX |------| GATEWAY | +-----------+ +---------+ +----------+ 192.168.150.10 | 192.168.150.9 +---------+ | VPN | +---------+ 192.168.150.1 

WORKSTATION有一个默认路由192.168.0.6 LINUX有一个默认路由192.168.0.1

我试图使用网关作为默认路由,但通过VPN路由端口80stream量。 根据我在http://www.linuxhorizo​​n.ro/iproute2.html阅读的内容,我试过这个:

 echo "1 VPN" >> /etc/iproute2/rt_tables sysctl net.ipv4.conf.eth0.rp_filter = 0 sysctl net.ipv4.conf.tun0.rp_filter = 0 sysctl net.ipv4.conf.all.rp_filter = 0 iptables -A PREROUTING -t mangle -i eth0 -p tcp --dport 80 -j MARK --set-mark 0x1 ip route add default via 192.168.150.9 dev tun0 table VPN ip rule add from all fwmark 0x1 table VPN 

当我在LINUX上运行“tcpdump -i eth0 port 80”,并在WORKSTATION上打开一个网页时,根本没有看到stream量通过LINUX。 当我从WORKSTATION运行一个ping时,我从一些数据包中得到这个结果:

 92 bytes from 192.168.0.6: Redirect Host(New addr: 192.168.0.1) Vr HL TOS Len ID Flg off TTL Pro cks Src Dst 4 5 00 0054 de91 0 0000 3f 01 4ed3 192.168.0.4 139.134.2.18 

这是为什么我的路由不工作? 我是否需要将GATEWAY和LINUX放在不同的子网上以防止WORKSTATION被redirect到GATEWAY? 我是否需要使用NAT,或者我可以单独使用路由(这是我想要的)吗?

“LINUX”告诉“WORKSTATION”使用“GATEWAY”而不是自己,因为它们似乎在同一个子网上。 如果你已经在“LINUX”上设置桥接(见brctl(8)),那么这只能工作,如果你做了,那么“WORKSTATION”应该在默认路由中使用“GATEWAY”。

确保每个广播域使用一个子网,广播数据包永远不会路由,因此您需要在“LINUX”的所有3个接口上使用不同的子网(可以使用/ 30s,但我build议坚持/ 24s增长)。 或者让它们桥接。 你也应该为VPN本身configuration一个单独的子网。

接下来,将VPN子网添加到VPN表中,例如:

ip route add 192.168.150.0/24 dev tun0 scope link table VPN proto static

为了使用这个表,添加一个路由规则,如下所示:

ip rule add fwmark 1 lookup VPN priority 500

看看你是否可以在添加任何fwmark规则之前通过“VPN”和“GATEWAY”路由数据包,以防万一。

我不认为禁用反向pathfilter是有益的。

我看到这个问题是相当古老的,但我认为我会添加一个快速笔记,以防止有人遇到同样的问题。 虽然最好将设备分开到Henkbuild议的不同网段,但如果这不可行,则有一种解决方法。

Linux(192.168.0.6)告诉工作站(192.168.0.4)使用网关(192.168.0.1)的redirect可以通过对Linux服务器上的/etc/sysctl.conf文件进行以下更改来禁用:

 net.ipv4.conf.all.send_redirects = 1