OpenVPN转发不断redirect到服务器本身(使用openVZ)

我正在尝试在一个新的虚拟服务器上configuration一个由OpenVZ驱动的VPN。 我采用了我当前使用Xen VPS托pipe的VPN的configuration,并将其粘贴到我的新服务器上。 经过多次尝试,我看到不同的主题,看到OpenVZ不支持iptablesMASQUERADE选项。 所以我尝试创build一个iptable.sh文件,通过以下博客文章 。

当我连接到VPN时,每个页面都从我的networking服务器 (与VPN相同的机器)中获取…例如,如果我尝试访问http://www.google.com ,我会看到“它运行”正在运行的Apache2服务器的默认页面。 我真的不明白为什么…这是我的configuration:

/etc/openvpn/server.conf

 mode server tls-server port 10735 proto udp dev tun0 # Certificates, blablah... # Virtual addr conf server 172.16.0.0 255.255.255.0 push "route 192.168.0.0 255.255.255.0" push "dhcp-option DNS 8.8.8.8" # Log, persitent connections, max clients, blabla.. 

旧的iptable conf (在我之前的服务器上,MASQUERADE工作)

 iptables -A FORWARD -s 172.16.0.0/24 -o eth0 -j ACCEPT iptables -t nat -A POSTROUTING -s 172.16.0.0/24 -o eth0 -j MASQUERADE 

新的iptables conf (存储在.sh文件中)

 /sbin/iptables -F /sbin/iptables -P OUTPUT ACCEPT /sbin/iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT /sbin/iptables -A FORWARD -s 172.16.0.0/24 -j ACCEPT #/sbin/iptables -A FORWARD -j REJECT # Perform NATing on outgoing packets to change the IP address the packets come from /sbin/iptables -t nat -A POSTROUTING -s 172.16.0.0/24 -j SNAT --to-source 89.2xx.xxx.xxx <- my public addr /sbin/iptables -A INPUT -p udp --dport 10735 -j ACCEPT /sbin/iptables -A INPUT -p icmp -j ACCEPT /sbin/iptables -A INPUT -i lo -j ACCEPT /sbin/iptables -A INPUT -i tun0 -j ACCEPT /sbin/iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT 

提前致谢 :)

附加信息

  • 没有问题的VPS连接,我可以ping几个域/ IP …

     ~# ping serverfault.com PING serverfault.com (198.252.206.16) 56(84) bytes of data. 64 bytes from stackoverflow.com (198.252.206.16): icmp_req=1 ttl=50 time=58.5 ms [...] 
  • http://<public VPS IP>返回到我用VPN获得的“It works”页面。

  • cat /proc/sys/net/ipv4/ip_forward返回1 (IP转发激活)

SNAT和MASQUERADE之间的区别:首先工作更快,但其次是使用dynamicWAN IP(使用路由表查找)。
许多云端VPS服务(如亚马逊)为您configurationDMZ:因此您的外部IP地址不是您服务器的外部接口上的IP地址。 从89.2xx.xxx.xxx(真正由networking硬件使用)转发到WAN的任何端口的所有连接都会发生。
因此,http://'public VPS IP'上的TCP请求将由提供者处理,并无条件地redirect到您的eth0。 这就是为什么你看到“有效”。
但是,如果您尝试将所有传出数据包的源IP字段设置为89.2xx.xxx.xxx – 提供商的networking将其评估为欺骗数据包并将其丢弃。
所以你应该使用分配给你的eth0 IP地址的SNAT(我猜它与外部不同)。

检查你的eth0子网是否与你的VPN子网不相交 – 172.16.0.0

我有我的OpenVPN服务器通过VPS设置,我不得不使用以下命令进行NAT的工作,因为MASQUERADE不会。 一旦我把它放入,并确保我允许转发规则,并打开/etc/sysctl.conf中的ip_forward,我很高兴。

 /sbin/iptables -t nat -A POSTROUTING -j SNAT --to-source external_ip_of_the_server 

那么,根据你描述的防火墙的症状,似乎有DNAT规则redirect访问从外部到内部IP地址:80。 这个规则不考虑传入的接口,因此你所有的传出请求也被DNATed。 您必须严格使用这种types的DNAT只redirect外部接口。