[本文自2023年此博客英文版翻译而来]

你是否曾担心过和朋友联机时,Steam 远程畅玩或 Parsec 等出现连接失败?又或者在网络状况极差的情况下,搭建 SSR 隧道连接海外服务器时遇到各种麻烦?自建一个家庭 WireGuard 节点或许正是解决之道。

WireGuard 是一款开源软件及通信协议,通过 UDP 隧道传输数据流量,旨在提供比 IPsec 和 OpenVPN 更快、更稳定的连接。其非对称加密过程涉及多种密码学协议的实现,包括 Noise 协议框架、Curve25519、ChaCha20、Poly1305、BLAKE2、SipHash24、HKDF 等。

手把手打造家用VPN:OpenWRT部署WireGuard教程

部署

依赖项

请确保 OpenWRT 上已安装以下插件:

wireguard-tools
kmod-wireguard
luci-app-wireguard
luci-proto-wireguard


如有需要,请运行以下命令进行安装:

opkg update
opkg install luci-proto-wireguard
opkg install luci-app-wireguard
opkg install kmod-wireguard
opkg install wireguard-tools
reboot

生成密钥与 Luci 配置

请注意,WireGuard 使用非对称加密方法(外加可选的对称密钥附加),因此需要为每个节点(“服务器”端也是一个节点)设置公钥、私钥和预共享密钥。

服务器端的密钥

创建目录

mkdir wireguard #为节点创建文件夹
cd wireguard

生成密钥

umask 077 #设置权限级别
wg genkey | tee sprivatekey | wg pubkey > spublickey #生成密钥,"sprivatekey" 代表服务器私钥,"spublickey" 代表服务器公钥
cat sprivatekey #查看并保存密钥以备后用
cat spublickey

Luci 设置

WireGuard VPN 配置

前往 OpenWRT>Network>Interfaces>Add New Interface,选择一个接口名称,并选择 WireGuard VPN 协议

填入刚刚创建的服务器私钥,选择一个监听端口(范围 1024 到 65535),并指定一个用于节点路由的网段(例如 192.168.100.1/24)。

在防火墙设置中,请确保将该接口分配到 VPN 区域。(如果没有 VPN 区域,则分配到 LAN 区域)

最后,保存并应用该接口。

防火墙设置

OpenWRT>Network>Firewall>Custom Rules 中添加以下行:

iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -o br-lan -j MASQUERADE
#根据你的自定义设置修改 192.168.100.0/24,此规则允许 WireGuard 节点访问局域网设备。
#如果禁用了 LAN 的桥接,请将 "-o br-lan" 改为 "-o eth0"。


最后,在 Firewall>Traffic Rules 中开放相应端口,如果你的路由器不是自行拨号,还需在家庭调制解调器(猫)上设置对应的端口转发。

生成客户端密钥

运行以下命令:

umask 077 #设置文件权限
cd wireguard
mkdir node_1
cd node_1
wg genpsk > sharekey #生成预共享密钥。
cat sharekey #查看并保存 sharekey 以备后用
wg genkey | tee cprivatekey | wg pubkey > cpublickey #生成密钥,"cprivatekey" 代表客户端私钥,"cpublickey" 代表客户端公钥
cat cprivatekey #查看并保存密钥
cat cpublickey #查看并保存密钥

请注意:预共享密钥是可选的,能增强安全性,但建议使用以获得更快的连接速度。

配置客户端节点设置

前往 OpenWRT>Network>Interfaces>Wireguard>Edit 填入客户端公钥和预共享密钥(勾选左下角的“添加预共享密钥”选项)。为节点指定一个 IP 地址(不要与服务器 IP 冲突)。并勾选“Route Allowed IPs”复选框。

如果需要设置多个客户端节点,请重复“生成客户端密钥”和“配置客户端节点设置”部分。
保存并应用,重启路由器以使更改生效。

创建客户端配置文件

下面是一个标准客户端配置文件的模板:

[Interface]
Address = 192.168.100.2 #你在 Interface 部分定义的客户端 IP
PrivateKey = cprivatekey #填入你的客户端私钥
DNS = #路由器的 IP 地址
[Peer]
PublicKey = spublickey #填入你的服务器公钥
AllowedIPs = 0.0.0.0/0 #选择允许客户端节点路由的网段,如果不清楚请勿更改
Endpoint = #填入你的域名,如果没有域名则填公网 IP
PersistentKeepalive = 25
#使用时删除所有注释

将文件保存为 Node_1.conf

在客户端应用中使用配置文件

选择“从文件添加隧道”,然后选择我们刚刚创建的 .conf 文件。

点击激活,应该就能正常运行了。

如果内容对你有点帮助,留个评论吧~


There are phalanges that can truly revere and believe.