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

169 天前
 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
2240 次点击
所在节点    宽带症候群
22 条回复
StinkyTofus
169 天前
都说 wireguard 简单, 确实简单, 但是配置成想要的效果太难了, 我也想打通两个局域网的所有设备, 但是折腾好久都没成功, 最后还是用 openvpn 了, 也好用的很。
yyysuo
169 天前
@StinkyTofus 基础知识到位,啥都简单,不到位,啥都难,都是个学习的过程。
strobber16
169 天前
好奇用的哪种 6to4 隧道。按理说国内没有哪家提供这种服务了,用哪种都跑不了会有巨大延迟
yyysuo
169 天前
@strobber16 抱歉,才发现题目写倒了,是 v6 over v4 。
zhutianjingtu
169 天前
cloudflare warp 是不是轻松解决?
mortal
169 天前
之前用 softether 简单得很
busier
169 天前
@yyysuo 1 年~~~~
ranaanna
168 天前
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
168 天前
我也觉得奇怪,目前一键部署的 wg 脚本 基本都能 v6 over v4....落地机有 v6 就行了

落地机有多个 v6 怎么分发给 client 是难点
yyzh
168 天前
@mortal +1 softether 贼简单而且很多第三方 openwrt 都给你配好了,连上去之后 openwrt 负责 v4 和 v6 的地址分配就像直接用网线连着的一样
qsnow6
168 天前
tailscale 更简单
emUi998
168 天前
没想到这个是难点啊,分享下我的做法:
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
168 天前
@emUi998 动态 ip 问题,可否直接用本地脚本 dingding 推送
yyysuo
168 天前
@ranaanna 还是基础知识太差了,如果仅搜索 wireguard 回家、v6 之类的关键词,我确实没见到有提到的,我是问了 chatgpt.......; 64 好像确实可以,我看都是服务端配 64 ,客户端配 128 ?需求比较简单就干脆都 128 了;至于把家里的公网 IP 分给办公室的电脑,确实没有相关的,一般都是搞 vps 的 v6 来分,毕竟是静态,等有需求再搞吧。
yyysuo
168 天前
@ranaanna 试了一下,确实是这样的,感谢。
net.ipv4.ip_forward=1
net.ipv6.conf.all.forwarding=2
net.ipv6.conf.eth0.accept_ra=2
flynaj
168 天前
为啥用 alpine ,用 openwrt 啊,配置简单
ranaanna
168 天前
@yyysuo 客户端也可以是/64 。实际上写成/128 也可以用,是有点造成使用者困惑的的地方。为此在哪里看到过作者还专门做过解释,address=中指定的/24, /64 ,只是地址的子网掩码和前缀长度的意思。通常 ipv6 地址的前缀长度,都应该是 64
ranaanna
168 天前
@flynaj 感觉 OP 选择 alpine 是有他的理由的。两者没有可比性,或者说不一定能互相替代。openwrt 很小,它可以很好地完成一些与网络控制/路由/应用相关的事,因为它是一个嵌入式系统。另一方面,apline 也很小,但它可以完成更多的事,因为它是一个极简的 linux 发行版,与大量应用程序相兼容。
petercui
168 天前
@ranaanna 目前运营商宽带通告的基本是 /60 ,也就是说家庭内部还可以再分 4 个子网。
ranaanna
167 天前
@petercui /60 的前缀长度可以分 16 个/64 子网

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

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

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

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

© 2021 V2EX