端木茵茵
2025-6-7 10:15:40
1.目标环境
1.1.终端
终端操作系统公网 ip云服务器Ubuntu 24.041.2.3.4客户端Windows 10/客户端Windows 10/1.2.软件
名称相关链接WireGuardhttps://www.wireguard.com2.配置过程
2.1.服务器端
(1)安装并配置 WireGuard
使用如下命令在 Ubuntu 中安装 WireGuardsudo apt install wireguard 复制代码 为了方便管理,我们在用户目录下创建一个 wireguard 文件夹,并切换到该文件夹,将其作为工作文件夹(如无特殊说明,之后的操作均在此目录中进行)mkdir -p ~/wireguard cd ~/wireguard 复制代码 使用如下命令生成服务器端的公钥与私钥wg genkey | tee server_private.key | wg pubkey > server_public.key 复制代码 接着创建一个名为 wg0.conf 的文件以作为 WireGuard 的配置文件。编辑创建的 wg0.conf,填入以下内容:[Interface] Address = 10.8.0.1/24 ListenPort = 51820 PrivateKey = [SERVER/private.key] PostUp = iptables -A FORWARD -i %i -j ACCEPT; PostUp = iptables -A FORWARD -o %i -j ACCEPT; PostUp = iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE PostDown = iptables -D FORWARD -i %i -j ACCEPT; PostDown = iptables -D FORWARD -o %i -j ACCEPT; PostDown = iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE 复制代码 配置组配置项说明取值[Interface]Address服务器端的虚拟局域网 IPIP 格式:X.X.X.X/子网前缀,如服务器10.8.0.1/24[Interface]ListenPort监听端口这里用 51820,你也可以选一个其他能用的,需要能通过防火墙(UDP)[Interface]PrivateKey服务器端的身份凭证私钥填之前生成的 server_private.key 文件里的内容[Interface]PostUp ...用于在运行时启用流量转发和 NAT 伪装一般不需要额外调整
-o eth0 可能需要根据你的实际默认路由接口进行调整[Interface]PostDown ...用于在关闭时取消流量转发和 NAT 伪装一般不需要额外调整
-o eth0 可能需要根据你的实际默认路由接口进行调整快速定位默认路由接口ip route show default | awk '{print $5}' 复制代码 (2)打开 IP 转发
使用如下命令打开 IP 转发(临时)sudo sysctl -w net.ipv4.ip_forward=1 复制代码 若你要永久启用 IP 转发,使用如下命令echo "net.ipv4.ip_forward=1" | sudo tee -a /etc/sysctl.conf sudo sysctl -p 复制代码 (3)防火墙放行(UDP)
取决于你的 ListenPort,这里用的是 51820,则需要在服务器放行端口 51820/udp# 如果使用的是ufw sudo ufw allow 51820/udp 复制代码 2.2.客户端
2.2.1.第一个客户端
(1)安装并配置 WireGuard
下载并安装 WireGuard Windows 版(https://www.wireguard.com/install)
打开软件,点击新建隧道 → 新建空隧道,会弹出如下面板,并自动生成的公钥和私钥
名称任填,配置文件输入框中填入以下内容[Interface] PrivateKey = [...] Address = 10.8.0.2/24 [Peer] PublicKey = [SERVER/public.key] AllowedIPs = 10.8.0.0/24 Endpoint = 1.2.3.4:51820 PersistentKeepalive = 25 复制代码 配置组配置项说明取值[Interface]Address当前客户端机使用的虚拟局域网 IPIP 格式:X.X.X.X/子网前缀,需在服务器允许的 IP 范围内(如服务器为10.8.0.1/24时客户端应为10.8.0.X/24)[Interface]PrivateKey客户端的身份凭证私钥,用于加密通信和身份验证自动生成,不要改动[Peer]PublicKey目标端(服务器)的身份凭证公钥之前在服务器上生成的 server_public.key 里的内容[Peer]AllowedIPs定义哪些目标 IP 的流量会通过隧道,使用逗号分隔10.8.0.0/24表示:
- 发送到该网段的流量经加密隧道
- 接受来自该网段的隧道流量[Peer]Endpoint目标端(服务器)的公网接入点服务器的公网 IP istenPort[Peer]PersistentKeepalive配置心跳包的发送间隔(秒),用于 NAT 穿透时维持连接(仅客户端需要)单位为秒,一般 20-30 秒就行填好后如下图
(2)放行防火墙
使用管理员身份执行以下 powershell 命令New-NetFirewallRule ` -DisplayName "允许 WireGuard 子网 ICMP (10.8.0.0/24)" ` -Direction Inbound ` -Protocol ICMPv4 ` -IcmpType 8 ` -RemoteAddress 10.8.0.0/24 ` -Action Allow ` -Enabled True 复制代码 成功后输出如下Name : {0ae8e092-9c84-4645-ae12-b70a4985c7c9} DisplayName : 允许 WireGuard 子网 ICMP (10.8.0.0/24) Description : DisplayGroup : Group : Enabled : True Profile : Any Platform : {} Direction : Inbound Action : Allow EdgeTraversalPolicy : Block LooseSourceMapping : False LocalOnlyMapping : False Owner : PrimaryStatus : OK Status : 已从存储区成功分析规则。 (65536) EnforcementStatus : NotApplicable PolicyStoreSource : PersistentStore PolicyStoreSourceType : Local RemoteDynamicKeywordAddresses : {} PolicyAppId : PackageFamilyName : 复制代码 2.2.2.第二个客户端
操作基本同第一个客户端,只是需要修改一下 Address 的值(通常采用主机号递增即可),修改后的配置文件如下[Interface] PrivateKey = [...] Address = 10.8.0.3/24 [Peer] PublicKey = [SERVER/public.key] AllowedIPs = 10.8.0.0/24 Endpoint = 1.2.3.4:51820 PersistentKeepalive = 25 复制代码 同理,如果有第三、第四等更多客户端,在这一配置的基础上修改 Address 的值即可
3.连接
3.1.服务器端(Ubuntu)
运行如下命令以链接sudo wg-quick up ~/wireguard/wg0.conf 复制代码 输入以下命令以允许客户端联机sudo wg set wg0 peer [CLIENT/public.key] allowed-ips [CLIENT/lan.ip/32] 复制代码 参数说明[CLIENT/public.key]客户端公钥[CLIENT/lan.ip/32]客户端虚拟局域网 ip例如对于如下客户端配置
应当运行sudo wg set wg0 peer pwDp2H9N0eYUaBv8g3owOYk4zvGYBR+5JbMve7/teEY= allowed-ips 10.8.0.2/32 复制代码 将所有需要连接的客户端都按如上操作添加
使用如下命令查看状态成功的输出应该如下(此处有两个客户端接入)interface: wg0 public key: [SERVER/public.key] private key: (hidden) listening port: 51820 peer: [CLIENT/public.key] allowed ips: 10.8.0.2/32 peer: [CLIENT/public.key] allowed ips: 10.8.0.3/32 复制代码 3.2.客户端(Windows)
打开 WireGuard 主界面,点击“连接”即可
3.3.连通测试
使用客户端(如 10.8.0.2) ping 服务器的虚拟局域网 ip(如 10.8.0.1)使用服务器(如 10.8.0.1) ping 客户端的虚拟局域网 ip(如 10.8.0.2)使用客户端(如 10.8.0.2) ping 其他客户端(如 10.8.0.3)的虚拟局域网 ipping 10.8.0.2 ping 10.8.0.3 复制代码 若客户端与服务器之前,客户端之间都能 ping 通则表示连通成功,否则请对照先前步骤,检查是哪一步出现了问题(通常是防火墙配置问题,可考虑从暂时关闭防火墙开始进行排查)
4.备注
4.1.在服务器端添加 Peer
为了避免每次启动 WireGuard 都需要运行sudo wg set wg0 peer [CLIENT/public.key] allowed-ips [CLIENT/lan.ip/32],可以按如下修改服务器端的 WireGuard 配置文件[Interface] Address = 10.8.0.1/24 ListenPort = 51820 PrivateKey = [SERVER/private.key] PostUp = iptables -A FORWARD -i %i -j ACCEPT; PostUp = iptables -A FORWARD -o %i -j ACCEPT; PostUp = iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE PostDown = iptables -D FORWARD -i %i -j ACCEPT; PostDown = iptables -D FORWARD -o %i -j ACCEPT; PostDown = iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE[Peer]PublicKey = [CLIENT1/public.key]AllowedIPs = [CLIENT1/lan.ip]/32[Peer]PublicKey = [CLIENT2/public.key]AllowedIPs = [CLIENT2/lan.ip]/32 复制代码 参数说明[CLIENT/public.key]客户端的公钥[CLIENT/lan.ip]客户端的虚拟局域网 ip4.2.开启/关闭连接
服务器端(Ubuntu)使用如下命令开启/关闭连接sudo wg-quick up ~/wireguard/wg0.conf # 开启 sudo wg-quick down ~/wireguard/wg0.conf # 关闭 复制代码 客户端(Windows)直接在 WireGuard 界面中点击“连接/断开”即可
4.3.拓扑图
graph LR subgraph 公网服务器 S[wg0: 10.0.0.1/24
公网IP: 1.2.3.4:51820] end subgraph NAT客户端A A[wg0: 10.0.0.2/24] end subgraph NAT客户端B B[wg0: 10.0.0.3/24] end A -- "出站连接①
(建立NAT映射)" --> S B -- "出站连接②
(建立NAT映射)" --> S S -- "中转流量③
10.0.0.2 → 10.0.0.3" --> B S -- "中转流量④
10.0.0.3 → 10.0.0.2" --> A style S fill:#d4f1f9,stroke:#333 style A fill:#f5d6e6,stroke:#333 style B fill:#e2f6d3,stroke:#333
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
相关推荐