VPN 伪装和 NAT

VPN 伪装和 NAT

我正在尝试设置一个 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

相关内容