iptables
netfilter-HOWTO这篇文章很好地说明了到底何时该DNAT,何时该SNAT,大致是:
SNAT 需要在nat表的POSTROUTING链里面做,DNAT需要在nat表的PREROUTING链里面做。文章里面有具体的例子。最好结合上面的图来看更加清晰。‘
sudo iptables -t nat -A PREROUTING --protocol tcp --dport 8000 -j DNAT --to-destination 192.168.104.222
sudo iptables -t nat -A POSTROUTING --protocol tcp --dport 8000 -j SNAT --to-source 192.168.104.222
其实在那个链里面做都无所谓,最主要的是要符合当时的情况。看本机处理这个包的流向再来编写命令是最好的(主要就是上面的图要对照来看)
nftables
这个应该是iptables的补充,nftables配置文件里面的语法比iptables要好读很多。
RedHat nftables
socat
这个工具可以用作应用层的端口转发,跟ssh -L -R这两个差不多。
socat TCP-LISTEN:8000,fork TCP:192.168.104.222:8000
这条命令相当于在本地的8000端口起一个监听socket,之后访问localhost的8000端口就相当于访问192.168.104.222的8000端口。如果希望穿透到 192.168.104.0/24网段的机器上,在192.168.104.222这台机器上还需要起一个socat,比如穿透到192.168.104.133这台机器上的2345端口
socat TCP-LISTEN:8000,fork TCP:192.168.104.133:2345
最后就可以有这个效果:访问103.22这台机器的8000端口,可以代理到104.133的2345端口。前提是192.168.103.22这台机器跟192.168.104.222这台机器互通,或者能访问到192.168.104.222的8000端口。
Linux EasyConnect
这里有一个Linux 的EasyConnect项目,但是需要EasyConnect的服务器支持Linux版本。使用Linux会方便调试网络问题,并且在使用上面更稳定一些。
Docker EasyConnect
其实使用Linux EasyConnect会有很多的坑:
上面所有的东西就是为了连上一个Linux VPN 踩的这么些坑,使用的工具。