OpenVPN 转发不断将我重定向到服务器本身(使用 openVZ)

OpenVPN 转发不断将我重定向到服务器本身(使用 openVZ)

我正在尝试在新的虚拟服务器上配置 VPN,该服务器由 OpenVZ 提供支持。我获取了当前 VPN 的配置(托管在 Xen VPS 上),并将其粘贴到我的新服务器上。经过多次尝试,我查看了不同的主题,发现 OpenVZ 不支持 选项MASQUERADEiptables因此,我尝试创建一个 iptable.sh 文件,方法是:这篇博文

当我连接到 VPN 时,每个页面都是从我的网络服务器获取(与 VPN 在同一台机器上)...例如,如果我尝试访问http://www.google.com,我看到正在运行的 Apache2 服务器的默认页面“它工作正常”。我不太明白为什么……这是我的配置:

/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 配置(在我之前的服务器上,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 配置(存储在.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 获得的“它有效”页面。

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

答案1

SNAT 和 MASQUERADE 之间的区别:前者工作速度更快,但后者使用动态 WAN IP(使用路由表查找)。
许多云 VPS 服务(如 Amazon)为您配置 DMZ:因此您的外部 IP 地址不是您服务器外部接口上的 IP。所有到任何端口的连接都从您的 89.2xx.xxx.xxx(网络硬件实际使用)转发到您的 WAN iface。
因此,http://'public VPS IP' 上的 TCP 请求将由提供商处理并无条件重定向到您的 eth0。这就是您看到“它有效”的原因。
但如果您尝试将所有传出数据包的 SOURCE IP 字段设置为 89.2xx.xxx.xxx - 提供商的网络会将其评估为欺骗数据包并丢弃它。
因此,您应该使用分配给您的 eth0 iface 的 IP 地址进行 SNAT(我猜它与外部不同)。

检查您的 eth0 子网是否与您的 VPN 子网 - 172.16.0.0 不相交

答案2

我通过 VPS 设置了 OpenVPN 服务器,由于 MASQUERADE 无法工作,因此我必须使用以下命令来使 NAT 工作。一旦我将其放入并确保我允许转发规则并在 /etc/sysctl.conf 上打开 ip_forward,我就可以开始了。

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

答案3

嗯,根据您描述的症状,您的防火墙似乎有 DNAT 规则将访问从外部重定向到内部 IP 地址:80。此规则不考虑传入接口,因此您的所有传出请求也将被 DNAT 化。您必须使用这种仅重定向外部接口的 DNAT。

相关内容