想请问一下各位, Wireguard IPv4 连接没问题,但是 IPv6 却遇到下面这样的情况怎么办?

2023-08-20 12:10:34 +08:00
 LittleState

我两台路由器使用 ipv4 连接对端时没有任何问题,但是换成 ipv6 后,我在异地使用 iperf3 测试家中的设备,除了路由器外,其他设备基本都没速度...

这是是怎么回事,我把 wg 的 mtu 已经改成了 1280 。 大概的网络环境就是下面这样

然后使用 iperf3 测速就这样

大概试了 3 种情况:

  1. OpenWrt-A 和 OpenWrt-B 上运行 wireguard 并连接,就是上面的图那样
  2. 笔记本 和 OpenWrt-A 连接,还是和 1 是一样的效果
  3. 笔记本 和 树莓派 连接,这样没任何问题,访问其他设备也是满速

两个路由器的配置

使用的 luci-app-wireguard ,基本上就只改了 mtu 为 1280

笔记本配置文件

// 笔记本
[Interface]
PrivateKey =
Address = 10.10.0.2/32
MTU = 1280

[Peer]
PublicKey = 
AllowedIPs = 10.10.0.0/24, 192.168.2.0/24
Endpoint = <ipv6-ddns-域名>:38538
PersistentKeepalive = 25

树莓派配置

[Interface]
PrivateKey = 
Address = 10.10.0.1/24
ListenPort = 38538
MTU = 1280

#replace eth0 with the interface open to the internet (e.g might be wlan0 if wifi)
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
# IP masquerading
PreUp = iptables -t mangle -A PREROUTING -i wg0 -j MARK --set-mark 0x30
PreUp = iptables -t nat -A POSTROUTING ! -o wg0 -m mark --mark 0x30 -j MASQUERADE
PostDown = iptables -t mangle -D PREROUTING -i wg0 -j MARK --set-mark 0x30
PostDown = iptables -t nat -D POSTROUTING ! -o wg0 -m mark --mark 0x30 -j MASQUERADE

# laptop
[Peer]
PublicKey = 
AllowedIPs = 10.10.0.2/32
2102 次点击
所在节点   WireGuard
27 条回复
1423
2023-08-20 13:40:48 +08:00
有必要 masquerading 吗?
用 openwrt 了,为什么还手写 iptables,用 luci web ui 配置不更好吗?
zbinlin
2023-08-20 14:01:19 +08:00
怎么你文中描述的前后矛盾:

> 除了路由器外,其他设备基本都没速度

> 笔记本 和 树莓派 连接,这样没任何问题,访问其他设备也是满速

还有可以试试树莓派跟 OpenWrt-B 看有没有问题
LittleState
2023-08-20 14:12:06 +08:00
@zbinlin #2 抱歉,是我的错,问题描述的太混乱了... 可能因为我自己也没理的太清楚

就是说我的目的是想让路由器 A 、B 使用 ipv6 组网,这样两边局域网内的设备都能互相访问了嘛

但是就是这个方式连接后,使用 iperf3 测速,除了 A 、B 外,对方的网络内其他设备速度都很慢

所以我就尝试用身边的笔记本开启 wireguard 连接路由器 A ,结果也是和上面同样的。

之后就尝试把树莓派作为 peer ,用笔记本连接,也是用 ipv6 ,但是就没有问题了...
zbinlin
2023-08-20 14:17:14 +08:00
这看明白了。
那你再试下 树莓派跟 OpenWrt-B 连看有没有问题
LittleState
2023-08-20 15:13:35 +08:00
@zbinlin #4 我刚按你说的试了下 OpenWrt-B 连接 树莓派

然后从 OpenWrt-B 上测试都没问题,速度都满速
- iperf3 -c 192.168.2.221 (树莓派)
- iperf3 -c 192.168.2.1 ( Openwrt-A )

但是从 OpenWrt-B 局域网内的笔记本测试上面的命令,又都是只有几百 KB/s 。

但是我从树莓派上测试连接对端,都是可以满速...
- iperf3 -c 192.168.3.1 ( OpenWrt-B )
- iperf3 -c 192.168.3.230 (笔记本)
LittleState
2023-08-20 15:16:41 +08:00
@zbinlin #4 OpenWrt-A 连接 OpenWrt-B 时,我看了两边的路由器,CPU 负载也不高
zbinlin
2023-08-20 15:47:18 +08:00
你上面的测试是基于 Openwrt A <-> Openwrt B wireguard 隧道来测的吧?
LittleState
2023-08-20 15:50:14 +08:00
@zbinlin #7 我在 5 楼回复的那些测试,是 树莓派 <-> Openwrt-B 这样连接的隧道
zbinlin
2023-08-20 16:01:14 +08:00
你还是基于 Openwrt A <-> Openwrt B wireguard 隧道 来测试,把 mtu 调大点,1340 试试,看有没有变化

分别测
树莓派连 Openwrt B
树莓派连 笔记本
笔记本连 Openwrt A
笔记本连 树莓派
zbinlin
2023-08-20 16:10:13 +08:00
也测试下 iperf3 加参数 --set-mss 900 试试
LittleState
2023-08-20 16:33:45 +08:00
好像还是那样子,两边的 mtu 改成了 1340... 不过还是谢谢了,头都大了啊。

笔记本连 Openwrt A
笔记本连 树莓派

https://sm.ms/image/pugvytqY2CFlmNK

树莓派连 Openwrt B
树莓派连 笔记本

https://sm.ms/image/g86KW2ecrsZzML1
zbinlin
2023-08-20 16:57:15 +08:00
iperf3 换参数 `--udp` 测下 udp 的看怎样?
LittleState
2023-08-20 21:10:36 +08:00
@zbinlin #12 我刚到家里,现在试试啊。使用 --udp 测试 A 、B 路由器的话会报这个错误:`iperf3: error - unable to read from stream socket: Connection refused`

然后 笔记本 ---> 树莓派 测试结果就是下面这样

![image.png]( https://s2.loli.net/2023/08/20/8YQVzJUliZMWgS3.png)
bobryjosin
2023-08-21 00:10:06 +08:00
接口的 MTU 是一样的吗,重启一下接口看看?直接用默认的 1420 。
LittleState
2023-08-21 00:34:20 +08:00
@bobryjosin #14 是一样的,我刚重启了两边,用默认的 MTU 也还是那样子...

上面一直就是 OpenWrt-B 用 IPv6 连接的 OpenWrt-A ,但是只要我改成 IPv4 连接就没问题了... 难道是 IPv6 到 IPv4 有损耗吗?
ysc3839
2023-08-21 01:16:15 +08:00
WireGuard 接口的 MTU 设置成 1200 甚至更低试试?另外建议抓包看看有没有 ICMP 返回错误
bobryjosin
2023-08-21 08:41:05 +08:00
@LittleState 我之前也是遇到和你一样的问题,mtu 太小导致的,ping 正常但是 ssh http 大包过不去,你看看直接用两台 openwrt 下面的 lan ip 互相用多线程打个流看看,目前我和海外的机器组网也是 ipv6 ,多线程打流没有问题,另外可以把标记路由的 postup 语句删了看看?
LittleState
2023-08-21 09:41:07 +08:00
@ysc3839 #16

我试了下改成了 1200 、1000 没有什么变化,我在 OpenWrt-B 上用 tcpdump icmp 好像也没抓到什么错误信息。

![image.png]( https://s2.loli.net/2023/08/21/i5I1D28aZHbted9.png)

现在问题就是,我在两边路由器上用 iperf 测试,它俩互相是正常的,但是访问对方局域网内的其他设备,就不行很慢
LittleState
2023-08-21 09:47:28 +08:00
@bobryjosin #17

是这样测试吗?对了那个 postup 配置是树莓派上的,现在没用树莓派作为 peer ,而是在两台 OpenWrt 路由器上启动的 wg

左边是 OpenWrt-B ---> OpenWrt-A
右边是 OpenWrt-B ---> 树莓派

![image.png]( https://s2.loli.net/2023/08/21/fq6JFxitdZ2DGEV.png)
zbinlin
2023-08-21 09:48:00 +08:00
你直接 ping 下对应的设备看下:

Openwrt A ping Openwrt B
树莓派 ping Openwrt B
树莓派 ping 笔记本

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/966797

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX