Ubuntu Server安装WireGuard VPN

一、安装WireGuard

#root权限
sudo -i

# 安装WireGuard模块和工具
apt install wireguard

# 调整目录权限
cd /etc/wireguard/
chmod 0777 /etc/wireguard

#调整目录默认权限
umask 077

二、配置WireGuard

1、生成服务器秘钥

#生成私钥
wg genkey > server.key

#通过私钥生成公钥
wg pubkey < server.key > server.key.pub

# 查看私钥和公钥
cat server.key && cat server.key.pub

2、生成客户端(client1)秘钥

#生成私钥
wg genkey > client1.key

#通过私钥生成公钥
wg pubkey < client1.key > client1.key.pub

# 查看私钥和公钥
cat client1.key && cat client1.key.pub

3、手动创建服务器配置文件

## 查询可访问网络的接口
root@hpfd7t:~# ip -o -4 route show to default | awk '{print $5}'
eno1


## 配置接口
sudo vim /etc/wireguard/wg0.conf

[Interface]
Address = 10.8.8.1
ListenPort = 51820
PrivateKey = SERVER_PRIVATE_KEY

PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eno1 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eno1 -j MASQUERADE

DNS = 119.29.29.29

[Peer]
PublicKey = $(cat client1.key.pub)
AllowedIPs = 10.8.8.10/32

[Peer]
PublicKey = $(cat client2.key.pub)
AllowedIPs = 10.8.8.11/32

# 注释:
### Address 本机虚拟局域网的IP。请使用保留给私有网络范围内的IP地址
#### SaveConfig 设置为true时,当关闭接口时将当前配置将保存到配置文件中
### ListenPort 接口监听的端口
### PrivateKey 服务器私钥,前面查看的复制到这里
### PostUp钩子启用iptables伪装。这允许流量离开服务器,使VPN客户端可以访问互联网。
### 用上面命令查询到的可用接口名称替换-A POSTROUTING后面的,这里是eno1
### PostDown钩子,我们在关闭接口之前删除iptables伪装。一旦接口关闭,iptablesnat转发规则将被删除。
### MTU 网络封包的大小,可设置为MTU = 1420,也可不写

### PublicKey 上面生成的客户端公钥client1.key.pub
### AllowedIPs 客户端所使用的IP,IP段为10.8.8.0/24,必须用某个IP则为/32,如这里就必须用10.8.8.10的IP
### 添加多个客户端直接按上面方法再增加Peer即可。


## 让配置和私钥对普通用户不可读
sudo chmod 600 /etc/wireguard/{server.key,wg0.conf}

4、添加新的客户端

# 之后要生成其他客户端如client2、client3等等也按此步骤操作即可。
#生成私钥
wg genkey > client2.key

# 通过私钥生成公钥
wg pubkey < client2.key > client2.key.pub

# 生成秘钥之后可以用下面的命令快捷导入配置文件
echo "
[Peer]
PublicKey =  $(cat client2.key.pub)
AllowedIPs = 10.8.8.11/32" >> wg0.conf

# 之后重新启动wg0接口即可

三、启用或关闭接口


# 启用Wireguard接口
sudo wg-quick up wg0

# 如果正确运行应输出以下内容
[#] ip link add wg0 type wireguard
[#] wg setconf wg0 /dev/fd/63
[#] ip -4 address add 10.0.0.1/24 dev wg0
[#] ip link set mtu 1420 up dev wg0
[#] iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o ens3 -j MASQUERADE

# 检查接口状态和配置
sudo wg show wg0
或者
ip a show wg0

wireguard作为内核模块运行,默认情况wireguard会自动启动,但接口wg0虚拟网卡不会自动启动。

# 将wg0设置为自动启动
sudo systemctl enable wg-quick@wg0

# 关闭wg0接口
sudo wg-quick down wg0

四、配置防火墙

在之前的步骤中我们在启动wg0接口postup前配置了一条iptables的NAT路由。为使NAT路由可正常工作,必须启用IP转发。

# 开启IP转发
sudo echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf

# 启用新的内核属性配置
sudo sysctl -p

# 如果您正在使用UFW管理防火墙,则需要允许端口51820的UDP连接
sudo ufw allow 51820/udp

五、配置客户端

客户端选择新建隧道,填入以下配置:

[Interface]
PrivateKey = 6M8HEZioew+vR3i53sPc64Vg40YsuMzh4vI1Lkc88Xo=
Address = 10.8.8.10

[Peer]
PublicKey = Tt5WEa0Vycf4F+TTjR2TAHDfa2onhh+tY8YOIT3cKjI=
AllowedIPs = 10.8.8.0/24
Endpoint = 公网IP:51820
PersistentKeepalive = 25

注释:

PrivateKey:为服务器配置中生成的客户端的私钥
Address:为服务器配置中peer规定的客户端IP
-.-
PublicKey:为服务器配置中生成的server的公钥
AllowedIPs:指整个虚拟网段为10.8.8.1-254网段都可以连接
Endpoint:为服务器公网IP+端口
PersistentKeepalive:自动重连时间

测试:
客户端可以ping 10.8.8.1看是否成功连接到中转服务器。
服务端可以通过wg查看peer已连接的主机信息。

六、多节点配置


步骤同上面配置客户端,完成后即可多节点互相连通,也就相当于成功创建了一个大的内网。

此时可在服务端通过wg查看peer已连接的全部主机信息。

无标签