我正在尝试设置一个 VPS,将来自 openvpn 客户端的流量转发到互联网,同时将传入的端口 80 流量转发回客户端。我已关注本指南配置服务器并创建客户端配置。在 VPS 上我有 iptables 规则:
-t nat -A POSTROUTING -s 10.0.0.0/8 -o eth0 -j MASQUERADE
和
-t nat -A PREROUTING -p tcp -m tcp --dport 80 -j DNAT --to-destination 10.8.0.6
第一条规则来自指南,运行良好。第二条规则允许我从互联网连接到端口 80 上的 VPN 客户端,但从客户端到互联网的 http 请求失败(https 仍然有效,并通过 VPN)。有人可以推荐一种可以解决这个问题的配置吗,或者解释一下为什么这个配置不起作用?
编辑:VPS 配置
# iptables -L -n
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
# iptables -L -n -t nat
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
DNAT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 to:10.8.0.6
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
MASQUERADE all -- 10.0.0.0/8 0.0.0.0/0
# cat /proc/sys/net/ipv4/ip_forward
1
答案1
预路由规则未指定接口或目的地,因此来自 VPN 客户端通过 tun0 发出的 http 请求会被发送回自身。
工作配置是
iptables -t nat -A POSTROUTING -s 10.0.0.0/8 -o eth0 -j MASQUERADE
iptables -t nat -A PREROUTING -p tcp -i eth0 -d $eth0_addr --dport 80 -j DNAT --to 10.8.0.6