基本原理
虽然说wg两端是对等节点,也就是Peer1和Peer2的关系。但总要有一个Peer是用户在用的,也就是需求发起方,也就是客户端(Client)。
这样,服务端和客户端的配置是有所不同的,而且受公钥分享的机制所制约,配置过程也是交错进行的。
说白了就是不直观,有点绕,得忍耐,还容易错,需要反复确认。
核心流程如下
服务器要安装wg软件
服务器要生成公钥和私钥
服务器要编写conf文件
conf文件里要包括NAT设置
服务器要设置ip_forward(本教程不包含)
客户端安装wg软件
客户端添加tunnel(同时也生成了客户公钥和私钥)
客户端编辑conf
再次编辑服务端conf添加客户端公钥和地址
测试
开始
服务端
先切到root
sudo su -
安装wg
apt install wireguard -y
创建公钥和私钥文件
cd /etc/wireguard
wg genkey | tee privatekey | wg pubkey > publickey
这样在/etc/wireguard下面就会产生2个文件
看看本机的网卡(们)
ifconfig
出来一堆东西,这里需要经验才能判断那个是外网出口的网卡,如果这个地方实在搞不定可以约我一对一
我这里是ens4
创建wg0.conf文件
vi wg0.conf
用vi相关知识编写文件内容如下
[Interface]
Address = 192.168.201.1/24
SaveConfig = true
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o ens4 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o ens4 -j MASQUERADE
ListenPort = 这里写一个小于65535大于1024的端口
PrivateKey = 这里替换成文件中的
客户端
windows客户端安装wg,官网下载即可
左下角新建隧道-新建空隧道
填写名称,例如debian
填写interface和Peer配置
Interface就是指自己,也就是当前Windows客户端
Peer就是指对方,也就是服务端
[Interface]
PrivateKey = 界面打开时候就确定了
Address = 192.168.201.3/32
DNS = 114.114.114.114
[Peer]
PublicKey = 服务端的公钥,在/etc/wireguard文件夹里
AllowedIPs = 0.0.0.0/0
Endpoint = 服务器IP:5283
回到服务端
修改服务端配置文件,添加客户端信息
[Peer]
PublicKey = 客户端的公钥,在新建隧道那个窗口里
AllowedIPs = 192.168.201.3/32
启动wg
wg-quick up wg0
看看状态
wg show
现在我们理一下:
服务端开了一个虚拟端口wg0
虚拟端口可以理解成网卡,地址是192.168.201.1
子网掩码是24,关于子网掩码本文不讨论
服务端有一个网卡叫ens4
还有一个网卡叫wg0
有个服务叫wg
监听了ens4网卡得5283端口
并且服务端有一对公钥和私钥,公钥已经配置在windows客户端的配置文件里了,私钥自己保留,配置在服务端自己的配置文件里。
配置文件里配置了NAT设置,为了转发wg0的流量到ens4,NAT配置细节不讨论
客户端也开了一个虚拟端口叫debian,
客户端也有一套公钥和私钥
客户端配置了这个debian网卡的地址192.168.201.3
子网掩码32
还配置了一个DNS
客户端得知道连谁,连谁配置在[Peer]里
所以[Peer]配置了服务器的地址,也叫endpoint,包括IP和端口
还有AllowIPs,这里是0.0.0.0/0,我目前在这个地方解释力匮乏,下面引用一句自己说的话:
有一种东西叫理解不完整,理解不完整的不讲 ——《同理说》
我们继续,因为有了客户端的公钥和IP
在服务端的[Peer]里又配置了客户端的信息
也就是公钥和AllowIPs,因为我读了官方文档,这个可以理解,就是如果服务器发现,也就是wg服务发现,有个数据包的目标是192.168.201.3,那么就允许往这个Peer上发。
测试
服务端的服务已经启动了,所以现在要做的就是用客户端链接服务端。
连之前ping一下192.168.201.1
连之后再ping一下192.168.201.1
然后再试试tracert指令测试一个IP看看怎么个路径
再开以IP为地址的网站
再开一个以域名为地址网站
如果哪个环节有问题,就要排查了。
这个地方是经验密集型工作,只能具体问题具体分析了。