开源项目地址:GitHub - mullvad/udp-over-tcp: Proxy UDP traffic over a TCP stream

#Ubuntu下编译
git clone https://github.com/mullvad/udp-over-tcp.git

cd udp-over-tcp 

#安装依赖依赖
apt install cargo -y 

#开始编译
./build-static-bins.sh 

#编译好之后,拿走所需的可执行文件,其余可删除 

mv target/x86_64-unknown-linux-gnu/release/tcp2udp /usr/local/bin/tcp2udp 
mv target/x86_64-unknown-linux-gnu/release/udp2tcp /usr/local/bin/udp2tcp

安装wireguard的vps(vps的公网IP为128.1.2.3)上运行tcp2udp,监听tcp端口4567,转发到wireguard的udp端口,命令如下。

tcp2udp --tcp-listen 0.0.0.0:4567 --udp-bind=127.0.0.1 --udp-forward 127.0.0.1:55555 --tcp-recv-timeout=130 --nodelay

在中转的vps(例:本地VMware安装的Ubuntu虚拟机)上运行udp2tcp,监听udp端口8910

转发到安装wireguard的vps端口4567 udp2tcp --udp-listen 0.0.0.0:16816 --tcp-forward <修改为wireguard服务ip>:4567 --tcp-recv-timeout=130 --nodelay

wireguard客户端连接到虚拟机端口16816即可

后台运行说明:

安装 Supervisor

sudo yum install supervisor

配置 Supervisor

  • Supervisor 的配置文件位于 /etc/supervisord.conf。一般情况下,您不需要修改这个文件。

  • 您可以在 /etc/supervisord.d/ 目录下创建任务配置文件(以 .ini 结尾)。ubuntu的在/etc/supervisor/conf.d建,格式是conf。将需要管理的后台任务放在这个目录下。

  • 编辑配置文件,指定要执行的命令、启动目录、日志文件等参数。

启动 Supervisor

sudo systemctl start supervisord

创建任务配置文件

  • /etc/supervisord.d/ 目录下创建一个子配置文件,例如 mycommand.ini

  • 编辑子配置文件,定义您要执行的命令和其他参数:

    [program:udp2tcp]
    command=/usr/local/bin/udp2tcp --udp-listen 0.0.0.0:16816 --tcp-forward wireguard服务器地址:4567 --tcp-recv-timeout=130 --nodelay
    directory=/usr/local/bin
    autostart=true
    autorestart=true
    stdout_logfile=/opt/udp2tcp/logfile.log

  • 重要参数说明:

    • command:要执行的命令及其参数。

    • directory:程序的启动目录。

    • autostart:Supervisor 启动时是否自动启动该任务。

    • autorestart:程序异常退出后是否自动重启。

    • stdout_logfile:自定义的输出日志文件。

  1. 重新读取配置并启动进程

    • 使用以下命令重新读取配置文件并启动新添加的进程:

      supervisorctl reread
      supervisorctl update
      supervisorctl start mycommand

或者添加systemd配置到/etc/systemd/system

[Unit]
Description=udp2tcp service
After=network.target

[Service]
Type=simple
User=nobody
ExecStart=/usr/local/bin/udp2tcp --udp-listen 0.0.0.0:16816 --tcp-forward wireguard服务器地址:4567 --tcp-recv-timeout=130 --nodelay
Restart=always

[Install]
WantedBy=multi-user.target