Debian 9/10 安装 WireGuard 备忘

不升级内核,或者内核ok但没有头文件,都有可能会遇到这样的错误:

RTNETLINK answers: Operation not supported

升级内核先参考我先前这篇文章:《debian 升级内核》

安装

sudo apt-get install libmnl-dev linux-headers-$(uname -r) build-essential make git # 安装必要的包

# 如果无法安装headlers,那么应该是内核偏老,先升级到比较新的内核

echo "deb http://deb.debian.org/debian/ unstable main" | sudo tee /etc/apt/sources.list.d/unstable.list
echo -e "Package: *\nPin: release a=unstable\nPin-Priority: 150\n" | tee /etc/apt/preferences.d/limit-unstable

apt-get update
apt-get upgrade
apt-get install wireguard-dkms wireguard-tools

配置

sudo mkdir -p /etc/wireguard
cd /etc/wireguard
sudo umask 077

# 快速生成密钥
sudo wg genkey | tee privatekey | wg pubkey > publickey

新建配置文件 wg0.conf

注意修改监听端口ListenPort,如果启用了防火墙,还需要开通相关端口

[Interface]
PrivateKey = #服务端的密钥
Address = 10.0.0.1/24, fd86:ea04:1115::1/64 #服务端的地址
ListenPort = 28472 #服务端的端口
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE; ip6tables -A FORWARD -i wg0 -j ACCEPT; ip6tables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE; ip6tables -D FORWARD -i wg0 -j ACCEPT; ip6tables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
SaveConfig = true

启动

快速启动:

sudo wg-quick up wg0

开机启动:

systemctl enable wg-quick@wg0

查看运行状况:

wg

配置客户端

其实 wireguard 中没有严格的客户端服务端的区别,配置客户端过程和服务端过程一样。只要把服务端的公钥和自己的公钥写入配置文件中,再填好对端的IP,会自动连接配对好。

以下是配置参考:

[Interface]
PrivateKey = #客户端的密钥
Address = 100.100.100.2/32 #客户端的内网地址
MTU = 1420
[Peer]
PublicKey = #服务端的公钥
Endpoint = 12.32.42.52:28472 #服务端的IP和端口
AllowedIPs = 100.100.100.0/24, 10.64.0.0/10, 10.128.0.0/10 #允许走wireguard的目的IP
PersistentKeepalive = 25

把这个配置连同客户端的公钥密钥一起放到客户端的/etc/wireguard文件夹中,就能启动了。

如果希望生成二维码,方便iOS和android刷二维码,还可以使用qrencode命令:

qrencode -t ansiutf8 < wg0.conf

Debian 10安装

  1. 增加源信息

    echo "deb http://deb.debian.org/debian/ unstable main" > /etc/apt/sources.list.d/unstable-wireguard.list
    printf 'Package: *\nPin: release a=unstable\nPin-Priority: 150\n' > /etc/apt/preferences.d/limit-unstable
    
  2. 更新源然后安装相关软件,用来编译 wireguard内核模块

    apt update
    apt install wireguard-dkms wireguard-tools
    

仍然报错

[#] ip link add wg0 type wireguard
RTNETLINK answers: Operation not supported
Unable to access interface: Protocol not supported
[#] ip link delete dev wg0
Cannot find device "wg0"

还是升级内核吧:

apt-get dist-upgrade
update-grub
/sbin/reboot

不过很奇怪,我重启之后内核其实并没有升级,但是 wireguard 能跑起来了。可能是中途某些步骤需要重启系统。下次遇到再补充了。


什么叫网元? 查看并记录服务器硬件信息