|
由于某些原因,家里面有个软路由刷了PVE做主系统,通过PPPOE拨号获取公网IP。
PVE后面连了几个客户端,通过vmbr0网卡获取内网IP。然后NAT成公网IP上网。
然后我想把里面的端口转发到公网IP上,
使用命令- iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 18080 -j DNAT --to-destination 192.168.1.2:80
复制代码 和- iptables -t nat -A POSTROUTING -p tcp -d 192.168.1.2 --dport 18080 -j MASQUERADE
复制代码 转发后没问题,公网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还可以…… |
|