WireGuard简单介绍
WireGuard是通过UDP协议传输数据的,这意味着它可以搭建在被墙的服务器上使用,复活被墙IP!
更安全的加密
- Curve25519 目前最高水平的秘钥交换算法。
- ChaCha20 对称加解密算法,比 AES 更快更高效。
- Poly1305 是一种 MAC (adminssage Authentication Code) 标准,用于验证数据的完整性和消息的真实性。
- BLAKE2 一种更安全的 HASH 算法(类似的有 SHA1, SHA256, MD5)
- SipHash24 另一种 HASH 算法。
- HKDF 一种秘钥衍生算法。
前提要求
系统要求:Debian 8 / 9、Ubuntu 14.04 / 16.04 / 18.04 / 18.10 服务器要求:OpenVZ 虚拟化的服务器不支持安装该VPN,其他虚拟化均可。 注意:如果你用的是 Vultr、DO,且你本地没有 IPv6 地址,那就不要勾选 Enable IPv6否则可能客户端链接时可能会出错。 CentOS7官方安装代码
Debian安装步骤
安装和 linux-image 内核版本相对于的 linux-headers 内核
apt update
apt install linux-headers-$(uname -r) -y
Debian安装后使用以下命令检测linux-headers内核是否安装成功
dpkg -l|grep linux-headers
安装WireGuard
echo "deb http://deb.debian.org/debian/ unstable main" > /etc/apt/sources.list.d/unstable.list
echo -e 'Package: *\nPin: release a=unstable\nPin-Priority: 150' > /etc/apt/preferences.d/limit-unstable
apt update
apt install wireguard resolvconf -y
resolvconf 是用来指定DNS的,旧一些的系统可能没装。
Ubuntu安装步骤
首先如果你是 Ubuntu 14.04 系统,那么请先安装 PPA 以下步骤仅限 Ubuntu 14.04 系统执行
apt update
apt install software-properties-common -y
通过PPA工具添加WireGuard源
add-apt-repository ppa:wireguard/wireguard
apt install wireguard
安装WireGuard
apt update
apt install wireguard resolvconf -y
验证是否安装成功
使用以下命令
lsmod | grep wireguard
modprobe wireguard && lsmod | grep wireguard
输出能看到wireguard即表示安装成功了
wireguard 212992 0
ip6_udp_tunnel 16384 1 wireguard
udp_tunnel 16384 1 wireguard
配置
生成密匙对
请先手动创建配置文件目录
mkdir /etc/wireguard
然后开始生成 密匙对(公匙+私匙)
wg genkey | tee sprivatekey | wg pubkey > spublickey
wg genkey | tee cprivatekey | wg pubkey > cpublickey
查看主网卡名称
ip addr
生成服务端配置文件
- 井号开头的是注释说明,用该命令执行后会自动过滤注释文字。
- 下面加粗的这一大段都是一个代码!请把下面几行全部复制,然后粘贴到 SSH软件中执行,不要一行一行执行!
echo "[Interface]
# 服务器的私匙,对应客户端配置中的公匙(自动读取上面刚刚生成的密匙内容)
PrivateKey = $(cat sprivatekey)
# 本机的内网IP地址,一般默认即可,除非和你服务器或客户端设备本地网段冲突
Address = 10.0.0.1/24
# 运行 WireGuard 时要执行的 iptables 防火墙规则,用于打开NAT转发之类的。
# 如果你的服务器主网卡名称不是 eth0 ,那么请修改下面防火墙规则中最后的 eth0 为你的主网卡名称。
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -A FORWARD -o wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
# 停止 WireGuard 时要执行的 iptables 防火墙规则,用于关闭NAT转发之类的。
# 如果你的服务器主网卡名称不是 eth0 ,那么请修改下面防火墙规则中最后的 eth0 为你的主网卡名称。
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -D FORWARD -o wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
# 服务端监听端口,可以自行修改
ListenPort = 443
# 服务端请求域名解析 DNS
DNS = 8.8.8.8
# 保持默认
MTU = 1420
# [Peer] 代表客户端配置,每增加一段 [Peer] 就是增加一个客户端账号,具体我稍后会写多用户教程。
[Peer]
# 该客户端账号的公匙,对应客户端配置中的私匙(自动读取上面刚刚生成的密匙内容)
PublicKey = $(cat cpublickey)
# 该客户端账号的内网IP地址
AllowedIPs = 10.0.0.2/32"|sed '/^#/d;/^\s*$/d' > wg0.conf
生成客户端配置文件
- 井号开头的是注释说明,用该命令执行后会自动过滤注释文字。
- 下面加粗的这一大段都是一个代码!请把下面几行全部复制,然后粘贴到 SSH软件中执行,不要一行一行执行!
echo "[Interface]
# 服务器的私匙,对应客户端配置中的公匙(自动读取上面刚刚生成的密匙内容)
PrivateKey = $(cat sprivatekey)
# 本机的内网IP地址,一般默认即可,除非和你服务器或客户端设备本地网段冲突
Address = 10.0.0.1/24
# 运行 WireGuard 时要执行的 iptables 防火墙规则,用于打开NAT转发之类的。
# 如果你的服务器主网卡名称不是 eth0 ,那么请修改下面防火墙规则中最后的 eth0 为你的主网卡名称。
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -A FORWARD -o wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
# 停止 WireGuard 时要执行的 iptables 防火墙规则,用于关闭NAT转发之类的。
# 如果你的服务器主网卡名称不是 eth0 ,那么请修改下面防火墙规则中最后的 eth0 为你的主网卡名称。
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -D FORWARD -o wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
# 服务端监听端口,可以自行修改
ListenPort = 443
# 服务端请求域名解析 DNS
DNS = 8.8.8.8
# 保持默认
MTU = 1420
# [Peer] 代表客户端配置,每增加一段 [Peer] 就是增加一个客户端账号,具体我稍后会写多用户教程。
[Peer]
# 该客户端账号的公匙,对应客户端配置中的私匙(自动读取上面刚刚生成的密匙内容)
PublicKey = $(cat cpublickey)
# 该客户端账号的内网IP地址
AllowedIPs = 10.0.0.2/32"|sed '/^#/d;/^\s*$/d' > wg0.conf
# 上面加粗的这一大段都是一个代码!请把下面几行全部复制,然后粘贴到 SSH软件中执行,不要一行一行执行!
生成客户端配置文件
接下来就开始生成客户端配置文件:
# 井号开头的是注释说明,用该命令执行后会自动过滤注释文字。
# 下面加粗的这一大段都是一个代码!请把下面几行全部复制,然后粘贴到 SSH软件中执行,不要一行一行执行!
echo "[Interface]
# 客户端的私匙,对应服务器配置中的客户端公匙(自动读取上面刚刚生成的密匙内容)
PrivateKey = $(cat cprivatekey)
# 客户端的内网IP地址
Address = 10.0.0.2/24
# 解析域名用的DNS
DNS = 8.8.8.8
# 保持默认
MTU = 1420
[Peer]
# 服务器的公匙,对应服务器的私匙(自动读取上面刚刚生成的密匙内容)
PublicKey = $(cat spublickey)
# 服务器地址和端口,下面的 X.X.X.X 记得更换为你的服务器公网IP,端口请填写服务端配置时的监听端口
Endpoint = X.X.X.X:443
# 因为是客户端,所以这个设置为全部IP段即可
AllowedIPs = 0.0.0.0/0, ::0/0
# 保持连接,如果客户端或服务端是 NAT 网络(比如国内大多数家庭宽带没有公网IP,都是NAT),那么就需要添加这个参数定时链接服务端(单位:秒),如果你的服务器和你本地都不是 NAT 网络,那么建议不使用该参数(设置为0,或客户端配置文件中删除这行)
PersistentKeepalive = 25"|sed '/^#/d;/^\s*$/d' > client.conf
接下来你就可以将这个客户端配置文件/etc/wireguard/client.conf 通过SFTP、HTTP等方式下载到本地了
cat /etc/wireguard/client.conf
剩余其他操作
赋予配置文件夹权限
chmod 777 -R /etc/wireguard
打开防火墙转发功能
echo 1 > /proc/sys/net/ipv4/ip_forward
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
sysctl -p
启动WireGuard
wg-quick up wg0
停止WireGuard
wg-quick down wg0
查询WireGuard状态
wg
设置开机启动
注意:Ubuntu 14.04 系统默认是没有 systemctl 的,所以无法配置开机启动。
systemctl enable wg-quick@wg0
取消开机启动
systemctl disable wg-quick@wg0