PVE后面连了几个客户端,通过vmbr0网卡获取内网IP。然后NAT成公网IP上网。
然后我想把里面的端口转发到公网IP上,
使用命令[ol]iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 18080 -j DNAT --to-destination 192.168.1.2:80 [/ol]复制代码和[ol]iptables -t nat -A POSTROUTING -p tcp -d 192.168.1.2 --dport 18080 -j MASQUERADE[/ol]复制代码转发后没问题,公网IP:18080可以访问。
但是PVE在国内,需要上网代理,想给客户端也顺便代理上。当我开启Wireguard后,端口转发直接连不上了。
我怀疑是路由问题,想使用 ip rule添加策略路由,把DNAT的回包打标,从哪来就从哪回,然而并不行,要么客户端不走代理,要么端口转发不通,要么两个都不行。
为了使用策略路由,我在wg配置文件里加上了”Table = Off“,通过ip route和ip rule设置路由表,但始终有问题。
我估计就是回程数据包走扶墙出去,然后源IP和之前不同,导致握手失败。
但是拿Openwrt试了下,链路层都全局代理的情况下,端口转发还可以使用,这是为什么?
我觉得大概率和默认路由有关,Op是怎么区分的?
折腾两天了都没搞定,特来发帖求助各位大神。
如果DNAT再加上SNAT,把源IP NAT成PVE的内网IP(192.168.1.1)再加一条静态路由 ip route add 192.168.1.0/24 dev vmbr0 table direct 似乎可以,但是SSH或者是其他的软件应该就看不见访客的真实IP了,但Openwrt还可以……