我有一台运行Debian的服务器,具有这样的networking连接:
eth0 - has public IP address 1.2.3.4 eth1 - has public IP address 1.2.3.5
我正在尝试在服务器上设置一个可以从我的Android手机连接到的VPN。 我按照http://wiki.debian.org/HowTo/AndroidVPNServer的说明安装和configurationxl2tpd和racoon。 这一切都有效,但是我想做一个最后的调整:当我将手机连接到VPN时,我的公网IP地址是eth0上的,即1.2.3.4。 我希望VPNstream量能够在eth1的IP地址后面进行NAT,即1.2.3.5(理想情况下,VPN客户端可以继续连接到1.2.3.4)。
我的防火墙规则如下所示:
VPN_CLIENT_RANGE=192.168.200.0/24 iptables -A INPUT -p udp --dport 500 -j ACCEPT iptables -A INPUT -p udp --dport 4500 -j ACCEPT iptables -A INPUT -p esp -j ACCEPT iptables -A INPUT -p udp -m policy --dir in --pol ipsec -m udp --dport 1701 -j ACCEPT # Enable VPN traffic on the ppp+ adapters (only active when a call is established) # to go through the machine using SNAT/masquerading. iptables -A FORWARD -i ppp+ -o eth0 -j ACCEPT iptables -A FORWARD -i eth0 -o ppp+ -j ACCEPT iptables -t nat -A POSTROUTING -o eth0 -s $VPN_CLIENT_RANGE -j MASQUERADE
我曾经希望在最后三行中将eth0改为eth1能够达到正确的效果,但是不会 – VPN客户端可以连接但不能再看到互联网,并且日志会显示来自VPN客户端(pppX接口服务器)仍然被发送出eth0(防火墙阻止没有最后三行)。
我需要以某种方式在pppd中configuration源地址吗? 或者更改ppp接口的默认路由?
我已经完成了。
当客户端连接到VPN时,build立PPP连接。
数据包从客户端stream到服务器上的pppN接口。 是什么导致他们通过“错误的”IP地址从互联网stream向互联网是服务器的默认路由表:
$ ip route show default dev eth0 scope link
即所有出站stream量通过eth0。
假设我们不想更改默认路由,我们需要的是通过eth1创build一个具有默认路由的单独路由表,并使VPN使用它。
将新表的条目添加到/ etc / iproute2 / rt_tables:
101 vpn
这个数字可以是文件中唯一的东西。 这个名字是手头工作的一个描述性的名字。
现在通过eth1添加一个默认路由到这个表中:
# ip route add table vpn default dev eth1 scope link
最后,强制传入的VPNstream量(在pppN接口上)根据我们的新表进行路由。 最简单的方法是使用/etc/ppp/ip-up.d和ip-down.d机制来添加和删除规则,因为ppp接口是上下移动的。
/etc/ppp/ip-up.d/vpn-routing:
#!/bin/sh IF=$1 ip rule add dev $IF table vpn
/etc/ppp/ip-down.d/vpn-routing:
#!/bin/sh IF=$1 ip rule delete dev $IF table vpn
为了使所有这些在重新启动后生效,需要在启动时执行“ip route add”行,例如防火墙脚本,或者在eth0的/ etc / network / interfaces中将其作为“up”行。