https://www.wireguard.com/
一 wireguard 介绍:
wireguard简介
wireguard是一个新的高性能V**,wireguard相对于OpenV**来说,配置起来更加简单,运行速度也更快,linux内核5.6中了合并了它,以后的版本大概率能用上原生的wireguard了.
二 centos7 下部署wireguard:
官方安装文档: https://www.wireguard.com/install/
# Wireguard 是内核级别的特性,对内核的版本是有要求的,最好先升级一下内核. 官方给出来了3种安装方式,任选一种即可:
# 此处选择centos7的安装内容,其他的系统在列表里面自行查找.
系 统: centos 7.x
内核要求: > 3.10 (uname -r)
### Method 1: a signed module is available as built-in to CentOS's kernel-plus:
$ sudo yum install yum-utils epel-release
$ sudo yum-config-manager --setopt=centosplus.includepkgs=kernel-plus --enablerepo=centosplus --save
$ sudo sed -e 's/^DEFAULTKERNEL=kernel$/DEFAULTKERNEL=kernel-plus/' -i /etc/sysconfig/kernel
$ sudo yum install kernel-plus wireguard-tools
$ sudo reboot
### Method 2: users wishing to stick with the standard kernel may use ELRepo's pre-built module:
$ sudo yum install epel-release elrepo-release
$ sudo yum install yum-plugin-elrepo
$ sudo yum install kmod-wireguard wireguard-tools
### Method 3: users running non-standard kernels may wish to use the DKMS package instead:
$ sudo yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
$ sudo curl -o /etc/yum.repos.d/jdoss-wireguard-epel-7.repo https://copr.fedorainfracloud.org/coprs/jdoss/wireguard/repo/epel-7/jdoss-wireguard-epel-7.repo
$ sudo yum install wireguard-dkms wireguard-tools
三 wireguard 配置:
# 3.1) 创建目录:
mkdir -p /etc/wireguard
# 3.2) 创建server端的公私钥:
wg genkey | tee privatekey-server | wg pubkey > publickey-server
# 3.3) 创建client端的公私钥:
wg genkey | tee privatekey-client | wg pubkey > publickey-client
# 3.4) 创建配置文件:
[root@bj-vnp wireguard]# cat wg0.conf
[Interface]
Address = 10.10.0.1/24
SaveConfig = false
DNS = 8.8.8.8
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -A FORWARD -o %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -D FORWARD -o %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
ListenPort = 51820
PrivateKey = UG0DrMJ1jQmaExSy6LOOwanDFyplfSgBtzCUKmL772k=
# 添加新用户,就新生成一组秘钥对,此处加入peer,后面可以有很多.
# office
[Peer]
PublicKey = zy3IkHgq6SdM
AllowedIPs = 10.10.0.2
# home
[Peer]
PublicKey = t6ab6f6j2
AllowedIPs = 10.10.0.3
################################################################################################
Interface: 服务端的配置端口 DNS IP 规则, 私钥都在这个栏目下配置
Address : 服务端IP地址, 主要要加上 子网掩码,内网服务可以写内网地址,在路由器上做好端口映射即可.
SaveConfig:
DNS : 取得的DNS地址 8.8.8.8
PostUp : 服务端启动后,添加这个规则,用于伪装和转发各种流量.
PostDown : 服务端关闭后,执行这个命令规则,清理启动时添加的规则.
ListenPort: wireguard 默认端口51820.
PrivateKey: 注意此处填写的是服务端的私钥.
[Peer] : 声明一个节点
PublicKey: 该节点的公钥
ALLowedIPs: 连接后获取的地址. 注意此处只需要分配一个固定的IP地址即可.
# 3.5) 开启内核转发功能,系统其它设置打开转发:
echo 1 > /proc/sys/net/ipv4/ip_forward
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
echo "net.ipv4.conf.all.proxy_arp = 1" >> /etc/sysctl.conf
sysctl -p
四 启动,停止,查看状态:
# 4.0 )不中断活跃连接的情况下重新加载配置文件:
wg syncconf wg0 <(wg-quick strip wg0)
# 4.1 ) 启动 wireguard:
wg-quick down wg0 && wg-quick up wg0
wg-quick up wg0
[root@bj-vpn wireguard]# wg-quick up wg0
[#] ip link add wg0 type wireguard
[#] wg setconf wg0 /dev/fd/63
[#] ip -4 address add 10.10.0.1/24 dev wg0
[#] ip link set mtu 1420 up dev wg0
[#] mount `8.8.8.8' /etc/resolv.conf
[#] iptables -A FORWARD -i wg0 -j ACCEPT; iptables -A FORWARD -o wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
# 4.2 ) 停止 wireguard:
wg-quick down wg0
[root@bj-vpn wireguard]# wg-quick down wg0
[#] ip link delete dev wg0
[#] umount /etc/resolv.conf
[#] iptables -D FORWARD -i wg0 -j ACCEPT; iptables -D FORWARD -o wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
# 4.3 ) 查看wireguard 客户端状态:
wg
[root@bj-vpn wireguard]# wg
interface: wg0
public key: sIPp+stGXBz
private key: (hidden)
listening port: 51820
peer: zy3IkHgq6Sd
allowed ips: 10.10.0.2/32
peer: t6ab6f6j2Rw
allowed ips: 10.10.0.3/32
五 客户端的下载安装:
https://www.wireguard.com/install/
# windows:
https://download.wireguard.com/windows-client/wireguard-installer.exe
打开软件 - 左下角 新建空隧道 - (填写内容) - 起个名字
[Interface]
PrivateKey = < 这里填写 Client 上 privatekey 的内容 >
ListenPort = 51820
Address = 10.10.0.2/24
DNS = 8.8.8.8 # 连接后使用的 DNS, 如果要防止 DNS 泄露,建议使用内网的 DNS 服务器
[Peer]
PublicKey = < 这里填写 Server 上 publickey 的内容 >
AllowedIPs = 10.10.0.0/16, 192.168.10.0/24, 192.168.2.0/23 # 指定要访问的服务端网段,或者设置0.0.0.0/0来进行全局代理.
Endpoint = 公网IP:51820 # 服务端公网暴露地址,51280 指定的端口,可以更改.
PersistentKeepalive = 25
*** 如果有其他的就按照上面的[Peer]继续添加即可.
保存后直接点-连接-就能看到是否连接上,日志项也能查看过程.
**** 重要提示 ****:
server 端[Peer]下的AllowedIPs 是写链接过来后获取的IP地址. 类似分配一个固定的IP地址
client 端[Peer]下的AllowedIPs 是写的那些网段的路由可以通过WG0转发,如果全局都要走wireguard就设置成0.0.0.0/0 。
示意图: