珂珂的个人博客 - 一个程序猿的个人网站

家里ubuntu 部署WireGuard

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

我扫了下好像不行?


上一篇:个人代码全部开源

下一篇:家里ubuntu 部署WireGuard


0 评论

查看所有评论

给个评论吧