我的机器上有一个 OpenVPN 服务器,只能通过 IPv6 连接,因为我的 ISP 对 IPv4 地址不太慷慨。
为了解决这个问题,我创建了一个 DigitalOcean droplet,并在其上安装了 Nginx,目的是使用该 droplet 通过 IPv6 将任何传入的 IPv4 流量转发到上述服务器。
我知道 DO droplet 和我的服务器之间的连接没有问题,因为我也可以从 droplet 通过 SSH 和 OpenVPN 连接到我的家庭服务器。我的问题是,每当我尝试从任何地方通过 DO droplet 连接到家庭 VPN(如最初计划的那样)时,根据 OpenVPN 客户端日志,连接似乎在某处丢失了Sat Apr 20 23:03:02 2019 read UDP: Unknown error (code=10054)
。
我还知道所需的 vpn 客户端和 droplet 之间的连接正在工作,因为我可以从那里通过 SSH 进入 droplet 机器。我还检查了防火墙端口,所需的端口已打开,并使用了所需的协议。
因此从理论上讲,连接的两个部分都应该没问题,但我仍然收到网络连接错误。我尝试了很多不同的方法来配置 nginx,但似乎都没有用。
总结
我想使用隧道将我的 IPv4 请求转发到仅可通过 IPv6 访问的服务器,但是连接在途中的某处丢失。
我的 Nginx 配置:
stream{
upstream backend {
server [2a02:ab88:5081:7e00:b4b6:fef2:5742:b12f]:1194;
}
server {
listen 1194 udp;
proxy_pass backend;
}
}
答案1
我已经尝试解决这个问题几个小时了,在我提交问题之后,我立即就解决了它。
解决方案不是用 Nginx 完成的,而是用socat
。该命令很简单,并且不言自明:socat UDP6-LISTEN:1194,fork UDP6:[2a02:ab88:5081:7e00:b4b6:fef2:5742:b12f]:1194