Wireguard配置点滴

听说wg相对其它种类VPN的好处,于是试了试。开始怎么也不能连上。主要是对peer中allowedips没理解。应该先连一下服务器,有了通信。


服务器配置

wg genkey | tee privatekey | wg pubkey > publickey
# 打开转发
echo 1 > /proc/sys/net/ipv4/ip_forward
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf

# 应用规则
sysctl -p
pi@raspberrypi:~ $ ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether b8:27:eb:24:16:4a brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.40/24 brd 192.168.1.255 scope global dynamic noprefixroute wlan0
       valid_lft 256571sec preferred_lft 224171sec
    inet6 240e:0:0:0:0:0:0:505/64 scope global dynamic mngtmpaddr noprefixroute
       valid_lft 259001sec preferred_lft 172601sec
    inet6 fe80::0:0:0:0/64 scope link
       valid_lft forever preferred_lft forever
服务器的配置
/etc/wireguard/wgx.conf

关键的一是服务器要配置iptables。按下面这个是好使的。

[Interface]
# 服务器私钥, 就是上面生成的 privatekey
PrivateKey = server_private_key_value

# 绑定地址
Address = 10.0.0.1/24

# 是否保存配置, 可以在运行中通过命令行添加新客户端, 并保存到此配置
SaveConfig = true

# 启动动作, 这里就要把 eth0 替换成之前记下的外网网卡名称 , wg0 是等下创建的虚拟网卡名称
# 配置防火墙规则
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -A FORWARD -o wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE; ip6tables -A FORWARD -i wg0 -j ACCEPT; ip6tables -A FORWARD -o 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

# 监听端口
ListenPort = 51820

# 客户端配置
[Peer]
# 客户端公钥, 生成步骤同服务器, 两端都可生成
PublicKey = client_public_key_value

# 分配给客户端的地址, 我这里让他随便选, 你也可以指定给他
AllowedIPs = 10.0.0.0/24,10.0.0.2/32

# 加客户端就在 Peer 节点下加公钥和 IP 就可以了, 操作同上

客户端的配置

[Interface]
PrivateKey = priv

#本机的wg上的IP
Address = 10.0.10.2/32
#MTU = 1300

[Peer]
PublicKey = pubkey

# 要访问的IP。服务器侧,及与wg同网段的机器
AllowedIPs = 10.0.10.0/24, 10.0.24.0/22
# 服务器的IP及wg端口
Endpoint = ip:port

# 内网主机保持连线
PersistentKeepalive = 45

据说MTU的设置也能影响连接。所以上述将MTU设置为了1300

The overhead of WireGuard breaks down as follows:

  • 20-byte IPv4 header or 40 byte IPv6 header
  • 8-byte UDP header
  • 4-byte type
  • 4-byte key index
  • 8-byte nonce
  • N-byte encrypted data
  • 16-byte authentication tag

不是很明白,先贴在这儿

[Interface]
PrivateKey = client_private_key_value

DNS = 114.114.114.114

Address = 10.0.0.3/24
...
# 这里按照最大开销计算, 实际的 mtu 为 1420 - (40 + 8 + 4 + 4 + 8 + 16) = 1344
# 我怕有坑, 再给点余量
MTU = 1300

发表评论

邮箱地址不会被公开。 必填项已用*标注