最近刷到某作者被抓,我想深入学习一下点到点通讯,创个系列一步一步来
两台不同内网主机无法直接通信,有多种方式解决,这里采取利用个人vps建立一个虚拟专用网络
目的: 绕过 对称型NAT限制,使主机之间可以直接通信
辉皮恩(虚拟专用网络):通过在公共网络上建立加密通道,使两台主机仿佛处于同一局域网内
我们将使用 WireGuard来搭建 ,因为它性能高、配置简单。
1、在 VPS 上安装并配置 WireGuard 服务器。
2、在每台主机上安装并配置 WireGuard 客户端。
3、通过 虚拟局域网进行通信,使用虚拟 IP 地址。
服务端安装配置
下载wireguard
sudo apt install wireguard
查看/etc/wireguard
目录下没有任何文件,这是正常的,因为还没有生成密钥和配置文件。
cd /etc/wireguard
生成服务器的私钥和公钥
先设置文件权限掩码,确保密钥文件的安全性
umask 077
生成服务器的私钥和公钥
root@VM-24-16-debian:/etc/wireguard# wg genkey | tee privatekey | wg > publickey root@VM-24-16-debian:/etc/wireguard# ls -al 总用量 12 drwx------ 2 root root 4096 11月 4 15:23 . drwxr-xr-x 99 root root 4096 11月 4 15:18 .. -rw------- 1 root root 45 11月 4 15:23 privatekey -rw------- 1 root root 0 11月 4 15:23 publickey
权限为-rw-------
创建wireguard配置权限
nano /etc/wireguard/wg0.conf
也可以使用vi编辑
添加如下规则:
[Interface]
PrivateKey = <服务器私钥内容>
Address = 10.0.0.1/24
ListenPort = 51820
#<服务器私钥内容>:将 /etc/wireguard/privatekey 文件中的内容复制粘贴到这里
#Address:虚拟局域网 服务器的虚拟 IP 地址,您可以根据需要更改,但客户端需要对应配置
#ListenPort:WireGuard 监听的端口,默认是 51820,也可以更改为其他未被占用的端口。
# 防火墙规则和 IP 转发(可选,根据您的需求)
PostUp = sysctl -w net.ipv4.ip_forward=1
PostUp = iptables -A FORWARD -i %i -j ACCEPT
PostUp = iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = sysctl -w net.ipv4.ip_forward=0
PostDown = iptables -D FORWARD -i %i -j ACCEPT
PostDown = iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
#PostUp 和 PostDown:这些命令在接口启动和关闭时执行,用于配置防火墙规则和启用 IP 转发。#如果您的服务器没有安装 iptables 或使用其他防火墙,可以根据情况修改或删除这些行。
记得#<服务器私钥内容>:将 /etc/wireguard/privatekey 文件中的内容复制粘贴到这里
启动WireGuard服务
确保配置文件权限正确 600
chmod 600 /etc/wireguard/wg0.conf
启动WireGuard接口
wg-quick up wg0
验证wireguard接口状态
wg-quick up wg0
设置开机自启
systemctl enable [email protected]
这里,[email protected]
是 WireGuard 软件包在安装时自动提供的一个 systemd 服务模板,用于管理 WireGuard 网络接口。[email protected]
中的wg0
会替换模板中的%i
,对应于wg-quick@****0.service
敏感词辉皮恩注解了。 其中%i
是一个占位符,代表要管理的 WireGuard 接口名称。
具体内容通过以下命令查看了解[email protected]
服务模板的内容。这里不再详细解释
cat /lib/systemd/system/wg-quick@.service
我这里执行的时候报错:
root@VM-24-16-debian:/etc/wireguard# systemctl enable [email protected]
Invalid unit name "[email protected]" was escaped as "\x5bemail\xc2\xa0protected\x5d" (maybe you should use systemd-escape?)
Failed to enable unit: Unit file \x5bemail\xc2\xa0protected\x5d.service does not exist.
是由于终端或命令行中,@
符号后面的内容被误认为是电子邮件地址,导致命令被错误解析
可以使用单引号括起服务名称 , 防止特殊字符被误解析。
systemctl enable 'wg-quick@wg0'
windows客户端安装配置
官网下载
https://www.wireguard.com/install/
选择windows install 下载后执行安装
生成密钥对
由于 Windows 客户端没有内置的命令行工具来生成密钥,我们可以使用 WireGuard 提供的图形界面或使用命令行工具wg
。
需要管理员权限打开
cd "C:/Program Files\WireGuard"
wg genkey > client_privatekey
wg pubkey < client_privatekey > client_publickey
然后通过type查看
type client_privatekey
type client_publickey
配置客户端
新建一个空隧道
在新建窗口进行配置
[Interface]
PrivateKey = <客户端私钥>
Address = 10.0.0.2/32 # 第一个客户端使用10.0.0.2,第二个使用10.0.0.3
DNS = 8.8.8.8 # 可选
[Peer]
PublicKey = <服务器公钥>
PresharedKey = <预共享密钥,可选>
Endpoint = <VPS_IP>:51820
AllowedIPs = 10.0.0.0/24
PersistentKeepalive = 25
可以查看对应文件进行填入
PrivateKey:填写生成的客户端私钥。
Address:客户端的虚拟 IP 地址,每个客户端应使用不同的 IP。
PublicKey:填写服务器的公钥(需要从服务器获取)。
Endpoint:服务器的公网 IP 地址和 WireGuard 监听的端口(通常为 51820)。
AllowedIPs:指定通过虚拟机局域网传输的 IP 范围,0.0.0.0/0 表示所有流量都通过虚拟局域网 。
在vps上添加客户端公钥
编辑/etc/wireguard/wg0.conf
文件。
添加客户端信息
[Peer]
PublicKey = <客户端公钥>
AllowedIPs = 10.0.0.2/32 # 对应客户端的虚拟 IP
注意:
- 如果有多个客户端,重复进行添加,并且进行修改对应信息
[Interface]
和[Peer]
部分之间应有一个空行。- 注释行应单独占一行,或放在配置项的末尾,并使用空格分隔。
重启wireguard服务
systemctl restart 'wg-quick@wg0'
如果出错可以采用手动方式,先暂停清除后,重新启动
sudo wg-quick down wg0 #确保接口关闭
ip link show wg0 #验证接口是否关闭
sudo ip link delete wg0 #如果仍存在手动删除
sudo systemctl stop wg-quick@wg0 #停止wiredguid服务
sudo pkill -f wg-quick #可能有残留进程,进行终止
sudo systemctl start wg-quick@wg0 #重新启动服务
sudo systemctl status wg-quick@wg0#检查服务状态
ip link show wg0 #验证接口是否正常创建
通过ping测试连接
ping 10.0.0.1
请注意:测试前确保防火墙规则添加
可以通过: 允许端口51820
的 UDP 流量:
sudo ufw allow 51820/udp
或者:sudo iptables -A INPUT -p udp --dport 51820 -j ACCEPT
可能出现的问题: 服务器配置中,PostUp
和PostDown
使用了eth0
作为网卡名称。然而,您的服务器可能使用了不同的网卡名称,例如ens3
、eth1
等。
可以使用ip addr 查看网卡名称
此时客户端和服务端连接便已经成功
重复上述步骤配置第二个客户端
第二个客户端的Address
应为10.0.0.3/24
。
在服务器的配置文件中添加第二个客户端的[Peer]
,AllowedIPs
为10.0.0.3/32
。
此时两台主机便仿佛处于同一局域网内
遇到问题
解决 debian10 git不到wireguard问题
使用的是 Debian 10(buster)或更早的版本,需要启用 backports 仓库来安装 WireGuard。
1. 编辑 sources.list 文件
使用您喜欢的文本编辑器(如 nano)打开/etc/apt/sources.list
文件:
sudo nano /etc/apt/sources.list
2. 添加 backports 仓库
在文件末尾添加以下行:
deb http://deb.debian.org/debian buster-backports main
3. 保存并退出
- 按
Ctrl + O
保存文件。 - 按
Enter
确认文件名。 - 按
Ctrl + X
退出编辑器。
4. 更新软件包列表
sudo apt update
5. 安装 WireGuard
sudo apt install wireguard -t buster-backports