安装
Cento7安装示例
安装参考 :
综合参考:
WireGuard 组网教程:快速构建安全高效的私密网络并实现内网穿透 组网神器WireGuard安装与配置教程(超详细)
yum install epel-release https://www.elrepo.org/elrepo-release-7.el7.elrepo.noarch.rpm -y
yum install yum-plugin-elrepo -y
yum install kmod-wireguard wireguard-tools -y
创建私钥和公钥
无论是中继服务器,还是作为客户端这一步的配置都是不可少的 1、创建私钥
wg genkey > /etc/wireguard/private_key
查看私钥
# cat /etc/wireguard/private_key
mE0xD9a3XebYnLDX8vFy3wpBaH8DkoY65IU9GrcRFV8=
2、根据私钥创建公钥
wg pubkey < private_key > /etc/wireguard/public_key
查看公钥
# cat /etc/wireguard/public_key
pF82/AYV7UIHySeNZ4y7nF/UcuKfgJ5ccXFrBr5PfxA=
-
至此简单使用的基本工作已经准备完成,秘钥放在/etc/wireguard/下,因为后续这里还要放入其他的配置文件放在一起方便集中管理
[root@bogon wireguard]# ls private_key public_key
测试环境说明:
- 中继服务器:公网地址114.114.114.114(域名为www.temptest.com),内网地址192.168.1.101,VPNip设置为10.0.0.1/24,网卡名称为em1
- 测试节点1:公网地址无(位于NAT后),内网地址192.168.1.109(和101在同一内网),VPNip设置为10.0.0.2/24,网卡名称为em1(作为客户端时网卡名称可忽略)
- 测试节点2:公网地址无(位于NAT后的虚拟机),内网地址192.168.200.130(在完全不同的网段中),VPNip设置为10.0.0.3/24
Centos作为中继服务器(中继路由)的配置
echo"[Interface]
PrivateKey = mE0xD9a3XebYnLDX8vFy3wpBaH8DkoY65IU9GrcRFV8=
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -A FORWARD -o wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o em1 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -D FORWARD -o wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o em1 -j MASQUERADE
Address = 10.0.0.1/24
ListenPort = 51820
[Peer]
PublicKey = XgMxD7ot/0oSfl/lIRu0Ukaof3zPwl3ocLK9MLLPuEs=
AllowedIps = 10.0.0.2/32
#Endpoint = 192.168.1.109:35262
PersistentKeepalive = 25
[Peer]
PublicKey = 5Fg9QrcxkfTJFil6wyWPdK9yCGaAa0jiTr3PsoT18kk=
AllowedIps = 10.0.0.3/32
PersistentKeepalive = 25" > /etc/wireguard/wg0.conf
配置说明:
[Interface]
PrivateKey = mE0xD9a3XebYnLDX8vFy3wpBaH8DkoY65IU9GrcRFV8= #服务器端前面生成的私钥
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -A FORWARD -o wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o em1 -j MASQUERADE #"em1"是前面提到的服务器网卡名,本条配置是在启动网卡时开启路由
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -D FORWARD -o wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o em1 -j MASQUERADE #"em1"是前面提到的服务器网卡名,本条配置是在关闭网卡时关闭路由
Address = 10.0.0.1/24 #本机的VPNip
ListenPort = 51820 #本机的VPN服务侦听的端口
[Peer] #节点1
PublicKey = XgMxD7ot/0oSfl/lIRu0Ukaof3zPwl3ocLK9MLLPuEs= #节点1生成的公钥
AllowedIps = 10.0.0.2/32 #节点1的ip
#Endpoint = 192.168.1.109:35262 #节点1的ip和服务端口,因为节点1和中继在同一网段内,网络可达,所以在服务端配置此条有意义
PersistentKeepalive = 25 #连接保活时间
[Peer]#节点2
PublicKey = 5Fg9QrcxkfTJFil6wyWPdK9yCGaAa0jiTr3PsoT18kk= #节点2生成的公钥
AllowedIps = 10.0.0.3/32 #节点2的ip
PersistentKeepalive = 25 #连接保活时间
Centos作为内网节点时的配置
echo"[Interface]
PrivateKey = 0Oc1ICUQff6TEA0E0CK4Mrsv7J1TZzTS0SxgpFmaS28=
Address = 10.0.0.2/24
[Peer]
PublicKey = pF82/AYV7UIHySeNZ4y7nF/UcuKfgJ5ccXFrBr5PfxA=
AllowedIps = 0.0.0.0/0
Endpoint = 192.168.1.101:51820
PersistentKeepalive = 25" > /etc/wireguard/wg0.conf
配置说明:
[Interface]
PrivateKey = 0Oc1ICUQff6TEA0E0CK4Mrsv7J1TZzTS0SxgpFmaS28= #节点1前面生成的私钥
Address = 10.0.0.2/24 #节点1的VPNip
[Peer]对于客户端而言,这里其实要配置的是服务器的信息
PublicKey = pF82/AYV7UIHySeNZ4y7nF/UcuKfgJ5ccXFrBr5PfxA= #中继服务器的公钥
AllowedIps = 0.0.0.0/0 #接收服务端消息的IP,写0.0.0.0/0是表示通配,接收所有来源的消息
Endpoint = 192.168.1.101:51820 #另一个客户端的ip和端口,因为和服务器在同一子网,所以此条配置使用内网IP即可
PersistentKeepalive = 25 #连接保活时间
Ubuntu作为内网节点时的配置,其实节点配置一样
echo"[Interface]
PrivateKey = /ZQ9wQHBLUzT2WOLTK+YaWfY6D50iBMKVO1XOP/sxzO=
Address = 10.0.0.3/24
[Peer]
PublicKey = pF82/AYV7UIHySeNZ4y7nF/UcuKfgJ5ccXFrBr5PfxA=
AllowedIps = 0.0.0.0/0,10.0.0.1/32,10.0.0.2/32
Endpoint = www.temptest.com:51820
PersistentKeepalive = 25" > /etc/wireguard/wg0.conf
配置说明:
[Interface]
PrivateKey = /ZQ9wQHBLUzT2WOLTK+YaWfY6D50iBMKVO1XOP/sxzO= #节点2前面生成的私钥
Address = 10.0.0.3/24 #节点1的VPNip
[Peer]对于客户端而言,这里其实要配置的是服务器的信息
PublicKey = pF82/AYV7UIHySeNZ4y7nF/UcuKfgJ5ccXFrBr5PfxA= #中继服务器的公钥
AllowedIps = 0.0.0.0/0,10.0.0.1/32,10.0.0.2/32 #接收服务端消息的IP,写0.0.0.0/0是表示通配,接收所有来源的消息,后面写的其他的在这里其实没意义,只是表示可以多配的意思
Endpoint = www.temptest.com:51820 #中继服务器的ip加服务端口,这里可以使用IP,也可以使用域名
PersistentKeepalive = 25 #连接保活时间
启动VPN并检查连接
-
关闭网络
wg-quick down wg0
-
开启网络
wg-quick up wg0
使用以上命令会自动加载/etc/wireguard/wg0.conf这个文件去启动VPN,中继服务器和节点客户端上都需要执行
在中继服务器启动后看连接状态:
[root@bogon wireguard]# wg
interface: wg0
public key: pF82/AYV7UIHySeNZ4y7nF/UcuKfgJ5ccXFrBr5PfxA=
private key: (hidden)
listening port: 51820
peer: 5Fg9QrcxkfTJFil6wyWPdK9yCGaAa0jiTr3PsoT18kk=
endpoint: 124.126.168.201:2593
allowed ips: 10.0.0.3/32
latest handshake: 1 minute, 4 seconds ago
transfer: 943.92 KiB received, 12.76 MiB sent
persistent keepalive: every 25 seconds
peer: XgMxD7ot/0oSfl/lIRu0Ukaof3zPwl3ocLK9MLLPuEs=
endpoint: 192.168.1.109:56435
allowed ips: 10.0.0.2/32
latest handshake: 1 minute, 24 seconds ago
transfer: 9.60 MiB received, 3.63 MiB sent
persistent keepalive: every 25 seconds
查看节点1连接状态:
[root@localhost ~]# wg
interface: wg0
public key: XgMxD7ot/0oSfl/lIRu0Ukaof3zPwl3ocLK9MLLPuEs=
private key: (hidden)
listening port: 56435
fwmark: 0xca6c
peer: pF82/AYV7UIHySeNZ4y7nF/UcuKfgJ5ccXFrBr5PfxA=
endpoint: 192.168.1.101:51820
allowed ips: 0.0.0.0/0
latest handshake: 48 seconds ago
transfer: 4.10 MiB received, 10.61 MiB sent
persistent keepalive: every 25 seconds
此时在中继服务器可以ping通10.0.0.2和10.0.0.3了,同理在另外2个节点也可以相互ping通
WireGuard配置文件说明
interface部分:
- PrivateKey: 由 wg genkey 生成的 Base64 编码的私钥。必须配置。
- ListenPort: 用于监听的 16 位端口。可选,如果未指定,则随机选择端口。
- DNS: 指定 DNS 服务器的 IP 地址。
- FwMark: 用于传出数据包的 32 位 fwmark。如果设置为 0 或 “off”,则禁用此选项。可选。可以以十六进制形式指定,例如,以 “0x” 开头。可选。
Peer 部分:
- PublicKey: 由 wg pubkey 根据私钥计算的 Base64 编码的公钥。必须配置。
- PresharedKey: 由 wg genpsk 生成的 Base64 编码的预共享密钥。可选,可以省略。此选项为现有的公钥加密提供了额外的对称密钥加密层,以增强对抗后量子计算的能力。
- AllowedIPs: 逗号分隔的 IP 地址(IPv4 或 IPv6)列表,带有 CIDR 掩码,用于允许此对等方的传入流量并指定传出流量的目标。可以多次指定。可用 0.0.0.0/0 匹配所有 IPv4 地址,使用 ::/0 匹配所有 IPv6 地址。
- Endpoint: 一个 IP 地址或主机名,后跟冒号,然后是一个端口号。此端点将自动更新为来自对等方的正确经过身份验证的数据包的最新源 IP 地址和端口。可选。
- PersistentKeepalive: 保持活跃的时间间隔,介于 1 和 65535 之间,表示多久发送一次对等方的身份验证空数据包,以保持有状态的防火墙或 NAT 映射的有效性。如果设置为 0 或 “off”,则禁用此选项。可选,默认情况下此选项被禁用。
注意:本文归作者所有,未经作者允许,不得转载