在本文中,我将向大家展示如何在 Ubuntu 上搭建 WireGuard 服务器,从而实现远程登录。
首先,我们先来了解一下,什么是 WireGuard?
WireGuard 是一款非常简单快捷的 VPN 工具,采用了最先进的加密技术。它的目标是比 IPsec 更快,更简单,更精简易用,同时避免大规模配置的麻烦。WireGuard 被设计为通用 VPN,用于在嵌入式接口和超级计算机上运行,适用于多种不同环境。WireGuard 最初是为 Linux 内核发布的,现在已经可广泛部署并且跨平台支持(Windows,macOS,BSD,iOS,Android)。WireGuard 目前发展迅速,并且已经被认为是业内最安全,最易用和最简单的 VPN 解决方案。
WireGuard 中涉及到几个基本概念:
下面是 WireGuard 的配置步骤:
1、创建虚拟网卡 eth0
2、使用私钥和对端的公钥对其进行配置建立连接
3、通过接口开始交换数据包
以上为建立一个 WireGuard VPN 链接的过程,建立好后,A 设备与 B 设备互相需要保证虚拟网卡的 IP 在相同网段中,并且这个网段被 WireGuard 的配置文件 AllowedIPs 所允许通过,最后,在 WireGuard 中的所有数据报文,都采用 UDP 的方式发送。
云端服务器 x 1
系统:Ubuntu Server 18.04.1 LTS 64bit
可访问网络的 PC x 1
系统:Windows11
Ubuntu 服务器 IP 地址 42.192.113.207
WireGuard 主端虚拟 IP 地址 172.16.1.11
PC
WireGuard 对端虚拟地址:172.16.1.14
sudo apt install -y wireguard
进入 wireguard 目录
cd /etc/wireguard/
使用命令生成一对公钥与私钥
wg genkey | tee privatekey | wg pubkey > publickey && cat privatekey && cat publickey
注意查看 WireGuard 生成的 PublicKey 是
q/fe0sDI0BUzs5OwiLfyqjN5Y40LTHk01rgLkHBDgRM=
新建空隧道
获得对端 PublicKey
QjvFxlqoQYnToTT6snhhly2D8ZASb6GzuO81ALSIG3E=
文件配置:
[Interface]
PrivateKey = IIDs0Jv/iCn08+mXvoXRTuiIzhUziIeyF6hlOEq63lw=
Address=172.16.1.14/32
[Peer]
PublicKey= q/fe0sDI0BUzs5OwiLfyqjN5Y40LTHk01rgLkHBDgRM=
AllowedIPs = 172.16.1.11/24
Endpoint = 42.193.113.207:51820
PersistentKeepalive = 25
创建服务器配置文件 wg0.conf
nano wg0.conf
[Interface]
Address = 172.16.1.11/24 #服务器虚拟地址
ListenPort = 51820 #监听端口
PrivateKey = IJ6niaDAl2/UXVApMIBAX8QjMgApDRTBtNHBsVi9z3o= #服务器 PrivateKey
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -A FORWARD -o %i -j ACCEPT; iptables -t nat -A POSTROUTING -o wg0 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -D FORWARD -o %i -j ACCEPT; iptables -t nat -D POSTROUTING -o wg0 -j MASQUERADE
[Peer]
PublicKey =QjvFxlqoQYnToTT6snhhly2D8ZASb6GzuO81ALSIG3E= #对端 Publickey
AllowedIPs = 172.16.1.14/32 #对端虚拟IP地址
PersistentKeepalive = 25 #上传心跳包间隔
创建网卡配置文件,文件名为 wg0
ip link add dev wg0 type wireguard
ip address
网络接口配置虚拟 IP 地址(此虚拟 IP 地址为前期准备中的 172.16.1.11/24)
ip address add dev wg0 172.16.1.11/24 ip address
创建一个私钥,用于 WireGuard 使用,并配置权限禁止他人访问
wg genkey | tee /tmp/private-key chmod 600 /tmp/private-key wg set wg0 private-key /tmp/private-key listen-port 51820
启动网络接口
ip link set wg0 up ip address
此时我们创建好了本地节点,需要配置哪些节点是我们的对端,才能建立网络连接。
点击连接
wg 查看连接状态
1、启动 WireGuard
wg-quick up wg0
2、停止 WireGuard
wg-quick down wg0
3、查看 WireGuard 运行状态
Wg
4、WireGuard 配置说明
[Interface]
Address = 172.16.1.11/24 #本机地址与掩码位数 (IPV4)
ListenPort = 51820 #本机监听 WireGuard 端口
PrivateKey = IJ6niaDAl2/UXVApMIBAX8QjMgApDRTBtNHBsVi9z3o= #本机加密私钥
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -A FORWARD -o %i -j ACCEPT; iptables -t nat -A POSTROUTING -o wg0 -j MASQUERADE
#启动前操作
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -D FORWARD -o %i -j ACCEPT; iptables -t nat -D POSTROUTING -o wg0 -j MASQUERADE
#停止后操作
[Peer]
PublicKey =QjvFxlqoQYnToTT6snhhly2D8ZASb6GzuO81ALSIG3E= #本机加密的对端公钥(加密后数据仅对端可以解密)
AllowedIPs = 172.16.1.14/32 #本机允许的对端设备的 IP 地址段,其实就是在本机中这个虚拟网卡接收到对端发来的源地址都允许有哪些设备 IP 地址(多 peer 不可重复)
PersistentKeepalive = 25 #当会话存在一端 IP 地址为 NAT 地址或虚假公网 IP 地址时,由该方阶段性每 25 秒发送 keepalive 报文保持会话的可用性,防止被设备终止。
1、如果你存在多个 [Peer] ,则在下面直接增加一个新的 [Peer] 栏目;
2、如果多个 Peer 存在不同的 IP,请不要让 AllowedIPs 存在重叠的 IP 地址段(比如配置多个相同 /24 只有一个生效);
3、Endpoint 既支持以域名的方式访问,也支持以 IP 的方式访问;
4、会话链接的建立只要保证两端数据在一台设备上成功协商,即使动态 IP 地址变更也不会影响 VPN 的稳定性;
5、ListenPort 不添加会自动生成高位端口用来 peer,以及主从结构下,从端不填写 listenport;
6、Table 参数可以使用 auto 和 off,两者分别对应"自动注入路由"和"禁止注入"。不配置采用 auto;
7、如果你是主从结构,需要让从端在配置中将从端的"AllowedIPs ="补写一条内容 0.0.0.0/0,::0 以允许所有流量;
8、PreUp,PostUp,PreDown,PostDown 这四个命令参数,是作为 wg-quick 快速设置/删除接口之前/之后由 bash(1)执行的四条命令,常用于配置自定义 DNS 或防火墙规则。 特殊字符串 %i 作为变量替代所控制的 INTERFACE 配置名。每个命令参数都支持多条命令,参数内的多条命令将按前后顺序依次执行,分隔符为 ; 分号。
全部0条评论
快来发表一下你的评论吧 !