前言

最近在研究Wireguard异地组网,打算将家里和机房的局域网组合在一起。同时朋友有使用Wireguard IPv6上网的需求,决定再在组网的基础上添加一个IPv6隧道。

准备工作

  • 两个网段不同的局域网(例如10.10.10.0/24192.168.1.0/24
  • 两台OpenWrt(至少一个接入公网IPv6)
  • 任意客户端

为机房PVE添加NAT网桥

PVE默认的网桥是采用桥接方式,这次我要为它添加一个IPv4 / IPv6双栈NAT网桥

添加网桥

添加一个网桥vmbr1,如图所示,将10.10.10.1预留给OpenWrt,IPv6 ULA地址给OpenWrt自动分配

截屏2023-06-03 08.56.13

为了给vmbr1网桥下的设备分配IP地址,我们需要安装DHCP服务,这里由于组网需要我选择安装OpenWrt

安装OpenWrt

创建虚拟机openwrt,配置如图所示

注意:先添加vmbr1再添加vmbr0,这样OpenWrt才会将vmbr0(互联网)视为WAN口

截屏2023-06-03 08.59.48

下载OpenWrt镜像并导入硬盘,这里可以参考我一篇没写完的文章(bushi

{% link https://rickg.cn/2022/05/25/pve-openwrt/ %}

推荐的镜像:

{% link https://openwrt.mpdn.fun:8443/ %}

qm importdisk [vmid] /var/lib/vz/template/iso/bleach-plus-20230601-openwrt-x86-64-generic-squashfs-combined-efi.img local --format=qcow2

导入完成后,启动OpenWrt,编辑/etc/config/network,修改LAN口IP

截屏2023-06-03 09.10.01

重启OpenWrt后,在vmbr1网桥下任意虚拟机访问10.10.10.1,即可登录OpenWrt

配置NAT6

安装完OpenWrt后,尽管此时我们拥有了IPv6 ULA地址,但未配置NAT6,因此并不能访问IPv6互联网

编辑/etc/sysctl.d/forward.conf ,添加以下内容:

net.ipv4.ip_forward=1
net.ipv6.conf.all.forwarding=1
net.ipv6.conf.eth1.autoconf=1
net.ipv6.conf.eth1.accept_ra=2

其中eth1为WAN口接口名

重启OpenWrt后,访问10.10.10.1,打开网络->防火墙->自定义规则,添加以下内容:

# Enable IPv6 NAT
ip6tables -t nat -A POSTROUTING -o eth1 -j MASQUERADE

点击重启防火墙后,vmbr1下的IPv6设备应该可以访问IPv6互联网了

截屏2023-06-03 09.31.43

配置Wireguard VPN

配置家中OpenWrt

ssh连接到路由器,创建密钥目录并设定掩码:

mkdir keys
cd keys 
umask 077

创建并查看密钥:

wg genkey > openwrt-home.key
cat openwrt-home.key
wg pubkey < openwrt-home.key > openwrt-home.pub
cat openwrt-home.pub

打开OpenWrt,点击网络->接口->添加新接口,名称为wg1,协议为WireGuard VPN

截屏2023-06-03 09.36.03

创建后自动打开接口编辑界面

截屏2023-06-03 13.15.01

将私钥填入配置界面,监听端口任意,建议选高位端口,防止被运营商干扰

IP地址一栏,我这里选用172.17.0.1/32的B类地址,个人建议用10.0.0.0/8的A类地址,自定义程度更高。对于IPv6地址,使用fd00::/8开头的本地地址即可,如图中的fd45:da8::1/64,配置完后保存并应用。

配置机房OpenWrt

生成公私钥等同上,但是IP填172.17.0.2/32fd45:da8::2/64,如图所示:

截屏2023-06-03 13.26.01

配置对端(Peer)

登入任意路由器,生成一个预共享密钥,增强安全性:

wg genpsk

该密钥在所有端通用,须保存好。

在Peers处点击添加,公钥填写对方的(如家里OpenWrt填写机房公钥),预共享密钥输入刚刚生成的,端点主机输入对端IP(这里我两端均为家宽,因此做了DDNS),端口输入配置的端口,持续Keep-Alive不填。

对于允许的IP,需要输入两项,第一项是WireGuard的IP段,即172.17.0.0/24,第二项即对方机器所处内网IP段,如对端为家则为192.168.1.0/24,如图所示:

截屏2023-06-03 13.36.24

配置完后保存并应用,点击WireGuard接口旁的“连接”,重启接口。

若要查看是否成功连接,点击LuCI界面中的状态->WireGuard状态即可看到对端连接信息:

截屏2023-06-03 13.39.43

此时ping一下对端内网段的IP,哈哈,是不是很激动?

截屏2023-06-03 13.40.38

配置客户端

创建密钥

对于macOS / Windows / Android / iOS等具有GUI等客户端,直接生成一对公私钥即可:截屏2023-06-03 17.09.05

image-20230603170949355

对于Linux,参照上文

编写配置文件

添加空隧道,填写以下配置文件:

[Interface]
PrivateKey = [你的私钥]
Address = 172.17.0.4/32, fd45:da8::4/128
DNS = 119.29.29.29, 2402:4e00::
MTU = 1420

[Peer]
PublicKey = [服务端公钥]
PresharedKey = [预共享密钥]
AllowedIPs = 0.0.0.0/0, ::/0
Endpoint = [服务端IP]:端口
PersistentKeepalive = 25

对于允许的IPAllowedIPs:填写0.0.0.0/0, ::/0即代理IPv4和IPv6所有流量,其他的一些示例:

# 只需访问内网段10.10.10.0/24,其他流量不走WireGuard
AllowedIPs = 10.10.10.0/24
# 全局代理,只允许IPv4流量
AllowedIPs = 0.0.0.0/0
# 全局代理,只允许IPv6流量
AllowedIPs = ::/0

保存配置文件后,在WireGuard客户端中导入即可,当然,在正式使用之前,我们还需在服务端中添加客户端作为对端。

配置服务端

打开OpenWrt的wg0接口,添加一个Peers,但是这次无需输入端点主机和端口,因为客户端可能位于多层NAT之后:

截屏2023-06-03 17.32.29

保存后,重启wg0接口,现在即可打开客户端享受安全、快速的WireGuard VPN了!

标签: Wireguard, IPv6, 异地组网

已有 2 条评论

  1. 新车即将上线 真正的项目,期待你的参与

  2. 2025年10月新盘 做第一批吃螃蟹的人coinsrore.com
    新车新盘 嘎嘎稳 嘎嘎靠谱coinsrore.com
    新车首发,新的一年,只带想赚米的人coinsrore.com
    新盘 上车集合 留下 我要发发 立马进裙coinsrore.com
    做了几十年的项目 我总结了最好的一个盘(纯干货)coinsrore.com
    新车上路,只带前10个人coinsrore.com
    新盘首开 新盘首开 征召客户!!!coinsrore.com
    新项目准备上线,寻找志同道合 的合作伙伴coinsrore.com
    新车即将上线 真正的项目,期待你的参与coinsrore.com
    新盘新项目,不再等待,现在就是最佳上车机会!coinsrore.com
    新盘新盘 这个月刚上新盘 新车第一个吃螃蟹!coinsrore.com

添加新评论