基于 Wireguard 的内网穿透
简介
WireGuard 是一个易于配置、快速且安全的开源 VPN,它利用了最新的加密技术。目的是提供一种更快、更简单、更精简的通用 VPN。它旨在比 OpenVPN 性能更高。WireGuard 被设计为通用 VPN,可在嵌入式接口和超级计算机上运行,适用于许多不同情况。它最初是为 Linux 内核发布的,现在已跨平台(Windows、macOS、BSD、iOS、Android)并可广泛部署。它目前正在大力开发中,但它可能已经被视为业内最安全、最易于使用和最简单的 VPN 解决方案。
配置
安装wireguard软件
1 | apt install wireguard resolvconf -y |
开启IP转发,使本节点成为转发服务器
1 | echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf |
输入sysctl -p
,确认net.ipv4.ip_forward = 1
如果安装失败,考虑是否为 DNS 问题
输入sudo vim /etc/resolv.conf
写入
#nameserver 127.0.0.53 (原来的屏蔽)
nameserver 223.5.5.5
nameserver 223.6.6.6
nameserver 127.0.0.1
保存后sudo apt-get update
进入配置存储路径,调整目录权限
1 | cd /etc/wireguard/ |
生成服务器秘钥
1 | #生成私钥 |
生成客户端(client1)秘钥
1 | #生成私钥 |
要几个客户端就再生成几个
显示所有生成的秘钥
1 | cat server.key && cat server.key.pub && cat client_wzx_pc.key && cat client_wzx_pc.key.pub |
自动创建服务器配置文件
1 | echo " |
设置服务器开机自启动
1 | systemctl enable wg-quick@wg0 |
启动wireguard
1 | #启动wg0 |
启动后输入ifconfig
,可以发现多了一个虚拟网络设备wg0
wireguard客户端下载地址
https://download.wireguard.com/windows-client/
客户端配置(以client1为例)
1 | [Interface] |
增加服务器客户端节点client2
1 | #生成私钥 |
增加后记得重启一下设备
UDP over TCP (待定)
WireGuard 在国内网络环境下会遇到一个致命的问题:UDP 封锁/限速。虽然通过 WireGuard 可以在隧道内传输任何基于 IP 的协议(TCP、UDP、ICMP、SCTP、IPIP、GRE 等),但 WireGuard 隧道本身是通过 UDP 协议进行通信的,而国内运营商根本没有能力和精力根据 TCP 和 UDP 的不同去深度定制不同的 QoS 策略,几乎全部采取一刀切的手段:对 UDP 进行限速甚至封锁。虽然对 UDP 不友好,但却无力深度检测 TCP 连接的真实性。于是将 UDP 连接伪装成 TCP 连接就可以蒙混过关了,可以用 udp2raw 绕过UDP屏蔽或QoS.
虽然道理是这么个道理,但是现在似乎并没有太大影响,主要是改成 TCP 手机端就不好操作了,那就先不改了,等以后遇到问题再改。
tailscale + derp
用 tailscale 搭建内网穿透还是挺简单的。但是,延迟有点大。如果用云服务器和 derp 搭建中继节点,过程还是比较麻烦的,而且只有使用域名的方式才可以通过认证防止被白嫖,只要别人知道了你的 derp 服务器的地址和端口,就可以为他所用。