我读了很多,很近,我觉得,我正在拉我的头发… 请帮助!
我有一个OpenVPN的cliend服务器设置本地路由,也改变了默认的gw(我知道我可以通过–route-nopull来阻止)。 我想要所有通过本地gw传出的http和sshstream量,以及其他一切通过vpn。
这是openvpn连接后的路由表:
# ip route show table main 0.0.0.0/1 via 10.102.1.5 dev tun0 default via 192.168.1.1 dev eth0 proto static 10.102.1.1 via 10.102.1.5 dev tun0 10.102.1.5 dev tun0 proto kernel scope link src 10.102.1.6 {OPENVPN_SERVER_IP} via 192.168.1.1 dev eth0 128.0.0.0/1 via 10.102.1.5 dev tun0 169.254.0.0/16 dev eth0 scope link metric 1000 192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.6 metric 1
这使得所有数据包都通过VPN隧道,除了那些去往192.168.1.0/24的数据包。
做wget -qO- http://echoip.org如预期的那样显示了vpn服务器的地址,数据包有10.102.1.6作为源地址(vpn本地ip),并且通过tun0来路由…由tcpdump -i tun0报告tcpdump -i tun0 ( tcpdump -i eth0没有看到这个stream量)。
我试过的是:
main表复制) iptables -t mangle -I PREROUTING规则来标记去往端口80的数据包 ip rule来匹配mangled包并将其指向第二个路由表 to 192.168.1.6和from 192.168.1.6添加一个ip规则指向第二个路由表(虽然这是多余的) net.ipv4.conf.tun0.rp_filter=0和net.ipv4.conf.eth0.rp_filter=0中将ipv4filtervalidation更改为none 我也尝试了一个iptables mangle output规则, iptables nat prerouting规则。 它仍然失败,我不知道我错过了什么:
iptables mangle prerouting :数据包仍然通过vpn iptables mangle output :数据包超时 是不是要达到我想要的,那么当做wget http://echoip.org我应该改变数据包的源地址为192.168.1.6路由之前? 但是,如果我这样做,从http服务器的响应将路由回到192.168.1.6和wget不会看到它,因为它仍然绑定到tun0 (VPN接口)?
请善良的灵魂,请帮助? 在openvpn连接之后,你会执行什么命令来实现我想要的?
期待头发再生…
0.0.0.0/1 via 10.102.1.5 dev tun0这是你的问题。
0.0.0.0/1是一个非常大的IP范围(0.0.0.0 – 127.255.255.255),它是路由表中的第一个条目,所以任何属于该范围的IP地址将被强制路由到tun0 。 范围非常大,它包含了互联网上可路由的IP空间的主要部分。 所以对我来说,parsing为69.163.172.52的echoip.org包含在0.0.0.0/1(0.0.0.0 – 127.255.255.255)之内。
要看我是否正确尝试一个wget到http://serverfault.com ,这对我来说,parsing为198.252.206.16,看看它是否出去eth0。 这应该是因为它超出了(0.0.0.0 – 127.255.255.255)。
一般来说,我通常使我的tun0 IP空间尽可能具体。 例如10.102.0.0/16 via 10.102.1.5 。
除非您的目标是为了安全/监控的原因,将您的所有互联网stream量路由到特定的出口点,否则我会尽量缩小您的隧道IP空间。