WireGuard
是一个非常简单、快速和现代的 VPN,在第3层运行,作为Linux的内核虚拟网络接口实现。
它设计精巧,核心代码仅四千多行,被Linux之父Linus Torvalds称为“艺术品”。要知道林纳斯大神平时都是喷人的,而能得到他的赞美,可见wireguard有多么优秀了。
本文不再过多介绍Wiregaurd的优点和原理,主要讨论其使用方法。
案例:两台服务器之间通过WireGuard组建内网
总体流程如下:
步骤一: 安装wireguard
官方安装教程:https://www.wireguard.com/install
使用命令安装:
apt install wireguard
步骤二: 生成秘钥对
① 开启ipv4流量转发:
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
sysctl -p
② 创建并进入WireGuard文件夹:
mkdir -p /etc/wireguard && chmod 0777 /etc/wireguard #创建WireGuard文件夹并赋予文件夹777权限
cd /etc/wireguard #转到Wireguard文件夹
umask 077 #修改新建文件的默认权限
③ 生成两个密钥对:
wg genkey | tee 1privatekey | wg pubkey > 1publickey #密钥对1
wg genkey | tee 2privatekey | wg pubkey > 2publickey #密钥对2
④额外生成预共享密钥来进一步增强安全性(可选)
wg genpsk > psk
对于两台服务器,这个值都是相同的,所以只需要运行一次命令就可以了。
步骤三:配置文件生成
服务器1的配置文件:
在/etc/wireguard
下新建文件,名为wg0.conf
填入一下内容
[Interface]
Address = 10.0.10.1 #本机wireguard虚拟局域网IP
ListenPort = 51820 #wiregauard端口
PrivateKey = #此处为client1的私钥
DNS = 1.1.1.1,119.29.29.29
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -A FORWARD -o wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -D FORWARD -o wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
#接受来源为eth0的转发;接受出口为eth0的转发;增加对出口为本机网卡的NAT映射注意eth0需要为本机网卡名称
MTU = 1420
[Peer]
PublicKey = #此处为client2的公钥
AllowedIPs = 10.0.10.2/32 #服务器2所使用的wireguard虚拟局域网IP
PostUp:启动 Wireguard 接口之后运行的命令。这个选项可以指定多次,按顺序执行。
PostDown:关闭 Wireguard 接口之前运行的命令。这个选项可以指定多次,按顺序执行。
服务器2的配置文件:
在/etc/wireguard
下新建文件,名为wg0.conf
填入一下内容
[Interface]
Address = 10.0.10.2 #本机wireguard虚拟局域网IP
PrivateKey = #此处为client2的私钥
DNS = 1.1.1.1,119.29.29.29
MTU = 1500
[Peer]
PublicKey = #此处为client1的公钥
AllowedIPs = 10.0.8.0/24 #此处为允许的服务器IP
PresharedKey = #此处为预共享密钥
Endpoint = 1.2.3.4:51820 #服务器1IP+端口
更多详细配置可参考这篇博客:https://icloudnative.io/posts/wireguard-docs-practice
步骤四: 启动
启动或停止wireguard服务端的命令如下:
# 启动WireGuard
wg-quick up wg0
# 停止WireGuard
wg-quick down wg0
设置开机启动:
systemctl enable wg-quick@wg0
步骤五: 测试
多台机器互ping即可:
ping 10.0.10.1