Image

知识库 → Linux Debian 12 中的端口转发从 IPv4 到 IPv6

[虚拟服务器]
出版日期: 06.06.2025

如果需要将一个IPv4端口的流量转发到另一个IPv6端口,我们将使用socat

假设您的IPv6已经配置好并正常工作。您可以通过Linux中的ping6 <domain>命令或Windows中的ping -6 <domain>命令进行检查。

在极少数情况下,ping可能正常工作,但实际流量无法通过。您可以通过使用命令curl --ipv6 -k -I https://ipv6.google.com进一步检查Linux和Windows的连接(如果在Windows的cmd中没有curl,请打开PowerShell)。

假设我们的任务是将IPv4的443端口转发到IPv6的4445端口。

1. 安装socat

apt install socat

2. 端口转发

socat TCP6-LISTEN:4445,fork,reuseaddr TCP4:127.0.0.1:443

确保443端口在本地可访问,或者更改为外部IP。

telnet 127.0.0.1 443

2.1 验证

telnet <ipv6> 4445

3. 创建服务

现在,我们创建一个服务文件,以便在系统重启后自动恢复转发,无需手动运行。同时,我们确保nginx服务在我们的命令之前启动。

nano /etc/systemd/system/socat-portforward.service
[Unit]
Description=Socat IPv6到IPv4端口转发
After=network.target
After=nginx.service
Requires=nginx.service

[Service]
ExecStart=/usr/bin/socat TCP6-LISTEN:4445,fork,reuseaddr TCP4:127.0.0.1:443
Restart=always
RestartSec=3
User=root
Group=root
KillMode=process

[Install]
WantedBy=multi-user.target

3.1 停止服务

Ctrl + C终止,或如果您使用&运行:

killall socat

3.2 以服务方式启动

systemctl daemon-reload
systemctl enable --now socat-portforward
systemctl status socat-portforward

3.3 启动顺序

我们在[Unit]部分添加了以下行,以确保正确的启动顺序:

After=nginx.service
Requires=nginx.service

完成!此命令可用于在各种配置中设置端口转发。





No Comments Yet