家里弄了个 vm 开 wireguard server,办公室 v4 over v6 获得 v6 能力, 1 年多才搞定

2024-05-30 16:10:04 +08:00
 yyysuo
想起来就折腾折腾,感觉很简单,一直不成功,最近终于搞定了,搜索了一下,网上没人写过相关的,记录一下需要避的坑。

1:因为 wireguard server 没开在主路由上,是在 esxi 里面新建了个 alpine ,本身有 v6 能力。
2:alpine 本身需要开 net.ipv6.conf.all.forwarding=1 这个参数,单独加这个参数会导致 alpine 分配不到公网 ipv6 地址,完整的参数如下
net.ipv4.ip_forward=1
net.ipv6.conf.all.forwarding=1
net.ipv6.conf.default.autoconf=1
net.ipv6.conf.eth0.autoconf=1
net.ipv6.conf.all.accept_ra=2
net.ipv6.conf.default.accept_ra=2
net.ipv6.conf.eth0.accept_ra=2

3:wireguard 配置中,v6 地址子网掩码要写 128
Address = 10.7.0.1/24, fd86::1/128

防火墙也要添加 v6 规则
PostUp = ip6tables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = ip6tables -t nat -D POSTROUTING 1; iptables -t nat -D POSTROUTING 1
2966 次点击
所在节点    宽带症候群
22 条回复
cJ8SxGOWRH0LSelC
2024-05-30 16:14:15 +08:00
都说 wireguard 简单, 确实简单, 但是配置成想要的效果太难了, 我也想打通两个局域网的所有设备, 但是折腾好久都没成功, 最后还是用 openvpn 了, 也好用的很。
yyysuo
2024-05-30 16:20:03 +08:00
@StinkyTofus 基础知识到位,啥都简单,不到位,啥都难,都是个学习的过程。
strobber16
2024-05-30 16:34:07 +08:00
好奇用的哪种 6to4 隧道。按理说国内没有哪家提供这种服务了,用哪种都跑不了会有巨大延迟
yyysuo
2024-05-30 16:49:19 +08:00
@strobber16 抱歉,才发现题目写倒了,是 v6 over v4 。
zhutianjingtu
2024-05-30 17:23:40 +08:00
cloudflare warp 是不是轻松解决?
mortal
2024-05-30 17:38:39 +08:00
之前用 softether 简单得很
busier
2024-05-30 17:47:54 +08:00
@yyysuo 1 年~~~~
ranaanna
2024-05-30 22:14:28 +08:00
1.OP 说得对这确实是 alpine linux 需要避的坑,但是 net.ipv6.conf.all.forwarding=2 net.ipv6.conf.eth0.accept_ra=2 即可,不需要其他。
2. 128 是可以的,但是子网掩码/64 也未尝不可,而且是更符合常理的值,另外很多人用/112 ,都不会影响到成功
3. 怎么会“没人写过相关的”,一搜一堆的,而且是各种 wireguard-install 脚本的常规操作
4. 给到的只是一个私网地址,聊胜于无而已。其实比较有挑战性的是从家里的 ipv6 地址池中(一般是/60 或/56 )通过隧道分配一个公网 ipv6 网络给办公室,让办公室希望有 ipv6 的都有公网 ip ,这样也就没有 ip6tables 什么事了。这对于静态 ip 是容易的,但似乎对于家宽这种动态 ip 的,还真“没人写过相关的”。
lcy630409
2024-05-30 22:19:22 +08:00
我也觉得奇怪,目前一键部署的 wg 脚本 基本都能 v6 over v4....落地机有 v6 就行了

落地机有多个 v6 怎么分发给 client 是难点
yyzh
2024-05-30 22:27:41 +08:00
@mortal +1 softether 贼简单而且很多第三方 openwrt 都给你配好了,连上去之后 openwrt 负责 v4 和 v6 的地址分配就像直接用网线连着的一样
qsnow6
2024-05-30 22:39:24 +08:00
tailscale 更简单
emUi998
2024-05-31 08:43:05 +08:00
没想到这个是难点啊,分享下我的做法:
1. 家庭 openwrt 作为主路由,pppoe 拨号,wan 获取到了/60 的 ipv6 pd
2. openwrt 上启动个 wireguard 隧道,在接口 advanced 里设置下,IPv6 assignment length=64 ,hint 自己挑个没用过的(其他接口也可以按照这个模式调整下),然后 IPv6 prefix filter 选择 wan6 ,这样 wg 接口就能获取到 IPv6 了
3. wireguard allowIP 里挨个终端分配下公网 IP 地址
这样操作完电脑、手机都是能通的,测 IP 也是公网 IP

还有种操作,是远程路由器上直接获得家里的 ipv6 PD ,也是差不多,只不过手动写个/64 的 ipv6 段到 allowIP 里,然后把这个段配置到远程路由器的 lan 接口的 ipv6 上,通过 slaac 就能给所有子网设备分配 IPv6 地址了。


关于家宽动态 IP 的问题,路由器上可以写个小服务自己刷新(需要自备一台公网服务器同步数据).但是手机 App 不会写,就手动改改了,一般也就改个 endpoint 和 IPv6 地址。
user100saysth
2024-05-31 08:58:00 +08:00
@emUi998 动态 ip 问题,可否直接用本地脚本 dingding 推送
yyysuo
2024-05-31 09:22:22 +08:00
@ranaanna 还是基础知识太差了,如果仅搜索 wireguard 回家、v6 之类的关键词,我确实没见到有提到的,我是问了 chatgpt.......; 64 好像确实可以,我看都是服务端配 64 ,客户端配 128 ?需求比较简单就干脆都 128 了;至于把家里的公网 IP 分给办公室的电脑,确实没有相关的,一般都是搞 vps 的 v6 来分,毕竟是静态,等有需求再搞吧。
yyysuo
2024-05-31 10:10:50 +08:00
@ranaanna 试了一下,确实是这样的,感谢。
net.ipv4.ip_forward=1
net.ipv6.conf.all.forwarding=2
net.ipv6.conf.eth0.accept_ra=2
flynaj
2024-05-31 11:17:02 +08:00
为啥用 alpine ,用 openwrt 啊,配置简单
ranaanna
2024-05-31 11:27:07 +08:00
@yyysuo 客户端也可以是/64 。实际上写成/128 也可以用,是有点造成使用者困惑的的地方。为此在哪里看到过作者还专门做过解释,address=中指定的/24, /64 ,只是地址的子网掩码和前缀长度的意思。通常 ipv6 地址的前缀长度,都应该是 64
ranaanna
2024-05-31 11:47:49 +08:00
@flynaj 感觉 OP 选择 alpine 是有他的理由的。两者没有可比性,或者说不一定能互相替代。openwrt 很小,它可以很好地完成一些与网络控制/路由/应用相关的事,因为它是一个嵌入式系统。另一方面,apline 也很小,但它可以完成更多的事,因为它是一个极简的 linux 发行版,与大量应用程序相兼容。
petercui
2024-05-31 18:21:40 +08:00
@ranaanna 目前运营商宽带通告的基本是 /60 ,也就是说家庭内部还可以再分 4 个子网。
ranaanna
2024-05-31 22:39:13 +08:00
@petercui /60 的前缀长度可以分 16 个/64 子网

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

https://ex.noerr.eu.org/t/1045419

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

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

© 2021 V2EX