WireGuard 已包含在内核中,但貌似还是要apt一下
apt install wireguard qrencode -y
qrencode是用于生成二维码,方便手机扫码
生成密钥对,这个密钥用于服务器
cd /etc/wireguard wg genkey | tee privatekey | wg pubkey > publickey
生成客户端密钥对,应该和上面是一样的,就是名字改一下
wg genkey | tee client_private.key | wg pubkey > client_public.key
创建配置文件 wg0.conf
[Interface] # 服务器的内网 IP 段,不要与局域网现有网段冲突 Address = 172.16.0.1/24 # 监听端口 (默认 51820,可自定义) ListenPort = 51820 # 服务器的私钥 PrivateKey = xxxxxxxxxxx # 开启内核转发 (如果系统未开启) #PostUp = sysctl -w net.ipv4.ip_forward=1 #PostDown = sysctl -w net.ipv4.ip_forward=0 # 假设 ens18 是服务器连外网的网卡 PostUp = iptables -t nat -A POSTROUTING -o ens18 -j MASQUERADE PostUp = iptables -A FORWARD -i wg0 -j ACCEPT PostUp = iptables -A FORWARD -o wg0 -j ACCEPT PostDown = iptables -t nat -D POSTROUTING -o ens18 -j MASQUERADE PostDown = iptables -D FORWARD -i wg0 -j ACCEPT PostDown = iptables -D FORWARD -o wg0 -j ACCEPT [Peer] # 客户端的公钥 PublicKey = xxxxxxxx # 允许客户端使用的内网 IP AllowedIPs = 172.16.0.2/32
注意最后这个 peer 的AllowedIPs 不要设为0.0.0.0 不然会导致服务器无法上网,应该只设为这个peer 的客户端ip
设为0.0.0.0 告诉 Ubuntu 服务器:“所有发往互联网(0.0.0.0/0)的流量,都应该通过 WireGuard 隧道发送给这个客户端(Peer)。”0.0.0.0/0 通常是用在客户端的配置文件中,用来让客户端的所有流量都走服务器。
还需要注意peer 的publicKey使用的是客户端公钥
启动服务
sudo wg-quick up wg0
查看状态
wg
或
wg show
设置开机自启,还没验证过
sudo systemctl enable wg-quick@wg0 sudo systemctl start wg-quick@wg0
然后防火墙放行 51820 udp
客户端配置
[Interface] # 客户端在隧道内的 IP Address = 172.16.0.2/32 # 客户端私钥 (在客户端设备上生成) 也可以用服务器帮忙生成 PrivateKey = <客户端私钥> # 可选:指定 DNS,防止泄露 DNS = 223.5.5.5 [Peer] # 服务器公钥 PublicKey = <服务器公钥> # 服务器公网 IPv6 地址和端口 Endpoint = [240e:你的服务器公网IPv6]:51820 # 关键:告诉客户端,访问 172.16.0.0/24 (隧道内网) 和 192.168.31.0/24 (家庭局域网) 都走这个隧道 AllowedIPs = 172.16.0.0/24, 192.168.31.0/24 # 保持连接活跃 (穿透某些严格的防火墙) PersistentKeepalive = 25
生成二维码
在服务器上创建一个临时的完整配置文件 client_full.conf (包含客户端私钥)。
qrencode -t ansiutf8 < client_full.conf
我扫了下好像不行?
珂珂的个人博客 - 一个程序猿的个人网站