V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
yyysuo
V2EX  ›  宽带症候群

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

  •  
  •   yyysuo · 202 天前 · 2301 次点击
    这是一个创建于 202 天前的主题,其中的信息可能已经有所发展或是发生改变。
    想起来就折腾折腾,感觉很简单,一直不成功,最近终于搞定了,搜索了一下,网上没人写过相关的,记录一下需要避的坑。

    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
    第 1 条附言  ·  202 天前
    抱歉,才发现题目写倒了,是 v6 over v4 。
    第 2 条附言  ·  202 天前
    感谢 ranaanna 大佬,确实只需要如下参数即可:
    net.ipv4.ip_forward=1
    net.ipv6.conf.all.forwarding=2
    net.ipv6.conf.eth0.accept_ra=2
    22 条回复    2024-06-01 04:33:22 +08:00
    cJ8SxGOWRH0LSelC
        1
    cJ8SxGOWRH0LSelC  
       202 天前
    都说 wireguard 简单, 确实简单, 但是配置成想要的效果太难了, 我也想打通两个局域网的所有设备, 但是折腾好久都没成功, 最后还是用 openvpn 了, 也好用的很。
    yyysuo
        2
    yyysuo  
    OP
       202 天前
    @StinkyTofus 基础知识到位,啥都简单,不到位,啥都难,都是个学习的过程。
    strobber16
        3
    strobber16  
       202 天前 via Android
    好奇用的哪种 6to4 隧道。按理说国内没有哪家提供这种服务了,用哪种都跑不了会有巨大延迟
    yyysuo
        4
    yyysuo  
    OP
       202 天前
    @strobber16 抱歉,才发现题目写倒了,是 v6 over v4 。
    zhutianjingtu
        5
    zhutianjingtu  
       202 天前
    cloudflare warp 是不是轻松解决?
    mortal
        6
    mortal  
       202 天前
    之前用 softether 简单得很
    busier
        7
    busier  
       202 天前
    @yyysuo 1 年~~~~
    ranaanna
        8
    ranaanna  
       202 天前
    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
        9
    lcy630409  
       202 天前
    我也觉得奇怪,目前一键部署的 wg 脚本 基本都能 v6 over v4....落地机有 v6 就行了

    落地机有多个 v6 怎么分发给 client 是难点
    yyzh
        10
    yyzh  
       202 天前 via Android
    @mortal +1 softether 贼简单而且很多第三方 openwrt 都给你配好了,连上去之后 openwrt 负责 v4 和 v6 的地址分配就像直接用网线连着的一样
    qsnow6
        11
    qsnow6  
       202 天前
    tailscale 更简单
    emUi998
        12
    emUi998  
       202 天前
    没想到这个是难点啊,分享下我的做法:
    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
        13
    user100saysth  
       202 天前
    @emUi998 动态 ip 问题,可否直接用本地脚本 dingding 推送
    yyysuo
        14
    yyysuo  
    OP
       202 天前
    @ranaanna 还是基础知识太差了,如果仅搜索 wireguard 回家、v6 之类的关键词,我确实没见到有提到的,我是问了 chatgpt.......; 64 好像确实可以,我看都是服务端配 64 ,客户端配 128 ?需求比较简单就干脆都 128 了;至于把家里的公网 IP 分给办公室的电脑,确实没有相关的,一般都是搞 vps 的 v6 来分,毕竟是静态,等有需求再搞吧。
    yyysuo
        15
    yyysuo  
    OP
       202 天前
    @ranaanna 试了一下,确实是这样的,感谢。
    net.ipv4.ip_forward=1
    net.ipv6.conf.all.forwarding=2
    net.ipv6.conf.eth0.accept_ra=2
    flynaj
        16
    flynaj  
       202 天前 via Android
    为啥用 alpine ,用 openwrt 啊,配置简单
    ranaanna
        17
    ranaanna  
       202 天前
    @yyysuo 客户端也可以是/64 。实际上写成/128 也可以用,是有点造成使用者困惑的的地方。为此在哪里看到过作者还专门做过解释,address=中指定的/24, /64 ,只是地址的子网掩码和前缀长度的意思。通常 ipv6 地址的前缀长度,都应该是 64
    ranaanna
        18
    ranaanna  
       202 天前
    @flynaj 感觉 OP 选择 alpine 是有他的理由的。两者没有可比性,或者说不一定能互相替代。openwrt 很小,它可以很好地完成一些与网络控制/路由/应用相关的事,因为它是一个嵌入式系统。另一方面,apline 也很小,但它可以完成更多的事,因为它是一个极简的 linux 发行版,与大量应用程序相兼容。
    petercui
        19
    petercui  
       201 天前
    @ranaanna 目前运营商宽带通告的基本是 /60 ,也就是说家庭内部还可以再分 4 个子网。
    ranaanna
        20
    ranaanna  
       201 天前
    @petercui /60 的前缀长度可以分 16 个/64 子网
    flynaj
        21
    flynaj  
       201 天前
    @ranaanna #18 你可能只用过 国内这些修改版,op 原版有 7000 多个软件包。alpine 有 5000 多个。像国人的开源软件 natmap 在 op 就有,alpine 没有。
    ranaanna
        22
    ranaanna  
       201 天前 via iPhone
    @flynaj 并没有在比较软件包的多少呀。当然如果算上 community repo ,alpine 目前是 24000 多个。只是说虽然两者都是 Linux ,但是定位完全不同,一个是可定制的嵌入式设备操作系统(是定制不是修改版,也没有国内国外之分),另一个是 Linux 发行版。每个人的喜好和熟悉角度不同,本人似乎是后者更喜欢和觉得简单一些
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5374 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 07:17 · PVG 15:17 · LAX 23:17 · JFK 02:17
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.