我在 vServer 上使用 SOCAT 时遇到了一个小问题。我的问题是我刚刚获得了 CG-NAT DS-Lite ISP,它为我提供了一个私有 IPv4 内部 ISP IP 和一个本地公共 IPv6 地址。这意味着我没有本地/功能/公共 IPv4 地址。
为了将我的内部 TCP 和 UDP 绑定服务提供给互联网,我必须使用 IPv4>IPv6 端口转发。
所以我确实建立了一个包含公共 IPv4 和 IPv6 的 VServer。
我的计划是将 VServers IPv4 上的端口转发到我的 IPv6 路由器。经过一番研究,我尝试了 socat,效果很好。我确实使用了这样的命令:socat TCP4-LISTEN:25,fork,su=nobody TCP6:[2a01:198:79d:1::8]:25
我可以通过我的 VServer 的 IPv4 提供我的路由器登录页面。一切顺利。
但我的问题是,我想一次性转发多个端口/端口范围。我只想将我的 VServer 用作 IPv4->IPv6 中继,而不想手动映射每个新端口。
端口映射应为 1:1,例如:IPv4 端口 25 在任何情况下也将成为 IPv6 端口。最好的解决方案是,如果每个端口(不包括 22)都转发到我的 IPv6 地址。
最终的配置也应该作为启动服务。
也许还有其他方法可以完成此操作。欢迎提出任何想法。
谨致问候,丹尼尔
答案1
在失望地等待无人回复后,我找到了自己的解决办法。以下命令可以同时打开和转发多个端口:
对于 TCP: echo -n 80 443 25 3389| xargs -d ' ' -I% bash -c 'socat TCP4-LISTEN:%,fork TCP6:[IP6HERE]:% &'
对于 UDP: echo -n 9987 8443| xargs -d ' ' -I% bash -c 'socat UDP4-LISTEN:%,fork UDP6:[IP6HERE]:% &'
输入要打开的端口并替换IP6此处使用您实际设备的 IPv6。不要忘记将 IPv6 的开放端口转发到您的目标设备。
对我来说效果很好。也许这对某些人有帮助。
有人知道如何通过启动我的 Linux VServer 来应用这些命令吗?
谨致问候,丹尼尔
答案2
要在启动时应用这些命令,请创建一个守护进程服务,并提供命令启动时的条件。