使用firewalld来端口转发
我就是不喜欢用socat :-P
能用系统自带的东西简单解决的问题为什么要多装一个东西呢对不对
firewall转发tcp到别的机器上
firewall-cmd --permanent --add-forward-port=port=<本机端口>:proto=tcp:toaddr=<目标IP>:toport=<目标端口>
firewall转发udp到别的机器上
firewall-cmd --permanent --add-forward-port=port=<本机端口>:proto=udp:toaddr=<目标IP>:toport=<目标端口>
允许防火墙伪装IP
(虽然不知道这个有什么意义但是不做不行)
firewall-cmd --add-masquerade --permanent
最后重载防火墙,使规则生效
firewall-cmd --reload
题外话:
firewall在/etc/firewalld/zones
下面储存了一些规则(应该可以这样说吧?
比如我添加完上面的规则之后那个xml文件是这样的
<?xml version="1.0" encoding="utf-8"?>
<zone>
<short>Public</short>
<description>For use in public areas. You do not trust the other computers on networks to not harm your computer. Only selected incoming connections are accepted.</description>
<service name="ssh"/>
<service name="dhcpv6-client"/>
<masquerade/>
<forward-port to-addr="<目标IP>" to-port="25565" protocol="tcp" port="25565"/>
<forward-port to-addr="<目标IP>" to-port="25565" protocol="udp" port="25565"/>
</zone>
那大概可以直接编辑这个xml然后直接firewall-cmd --reload
使规则生效吧?
没实验过(逃走
20191015 update:
socat真香!
docker run -d --restart=always \
-p 10022:10022 \
alpine/socat \
TCP4-LISTEN:10022,fork,reuseaddr TCP4:192.168.122.101:22 \
知识共享署名-署名-非商业性使用-相同方式共享 4.0 国际许可协议