如何通过 IPv6 公网 IP 打通多个 IPv4 LAN 网段 (家庭宽带)

2024-02-06 18:43:01 +08:00
 nealot

IPv4 地址枯竭已经持续很久了。

说实话,现在有些城市打 10000 号,就能申请到一个 IPv4 公网 IP ,本身就是一件有点神奇的事情。

有的时候,虽然投诉后立马申请到了,但是过两周电信可能又会偷偷地把地址换成私网 IP 。电信这么做显然不是闲得慌,本质原因依然是 IPv4 地址枯竭。

楼主此前拿到过多个城市的公网 IPv4 ,然后舒服地 n2n 组网用了很久。但是最近新办的宽带改桥接模式后,发现又是 100.64 网段。再投诉一次固然可以,但是差不多该换个解法了。

请问如果要实现这样的组网,需要哪些软件和配置呢?

LAN1 (IPv4) --- R1.IPv6 --- Cloud VM --- R2.IPv6 --- LAN2 (IPv4)
                R1.IPv4                  R2.IPv4
                   v                       v
               Internet                 Internet

注 1: 路由器 (R1, R2) 运行的可能是 Ubuntu Server ,也可能是 OpenWRT

注 2: 路由器的 IPv6 地址专门用于组网,普通流量走 v4 出去 (即使是私网)

3057 次点击
所在节点    程序员
23 条回复
jiangzhexin
2024-02-06 18:49:55 +08:00
使用 wireguard 在 R1 ,R2 上建立连接就好了,然后做好路由和防火墙放行
nealot
2024-02-06 18:52:35 +08:00
@jiangzhexin IPv6 地址可能会变

另外不希望 Cloud VM 负责流量转发
azure2024us
2024-02-06 18:57:00 +08:00
描述有些乱。

告诉你一个方法(使用 haproxy ):

前提:光猫桥接后,路由器上能获取到 ipv6 。以下以 openwrt 路由为例

1. iptables 放开端口策略,写入到 /etc/firewall.user

ip6tables -I INPUT -p tcp -m tcp --dport 443 -j ACCEPT

2. 本地 开启一个 haproxy ,实现 ipv6 转 ipv4

frontend ha_in
mode tcp
bind [::]:443
log global
option tcplog
default_backend ha-out

backend ha-out
mode tcp
default-server inter 10s fall 2 rise 2
option tcp-check
server ha 192.168.1.2:443 weight 1

根据需要改 192.168.1.2 ,同一个段,或不同段都行,只有内部网络是互通的就行
jiangzhexin
2024-02-06 18:57:49 +08:00
写个检测脚本得了,发现不通就 reset endpoint ,虽然不算很优雅,但也算能用不是么
lovelylain
2024-02-06 19:17:18 +08:00
ipv6 ddns ,openwrt 自带一个简单脚本 wireguard_watchdog ,加入 crontab 就行
@nealot
hronro
2024-02-06 19:31:53 +08:00
tailscale + subnet, 如果能 P2P 的话 (两边都有 IPv6 公网 IP 的话应该很容易), 甚至不需要 Cloud VM
yUp6aXk01XFNpdgh
2024-02-06 19:35:01 +08:00
Cloud VM 上自建 headscale ,或者直接上 tailscale 也行,路由器侧也对应安装应用。虽然都是基于 wg 上层的实现应用,不过可以 ipv6 直连并且省去 DDNS 的麻烦。剩下搞好路由就可以了。
nealot
2024-02-06 19:38:00 +08:00
@lovelylain @jiangzhexin 按我的理解,n2n 属于 peer to peer vpn ,每个节点 (edge) 在协调下,有直连的能力,但是 n2n 的 IPv6 支持比较有限

wireguard 在实现上,应该不属于 peer to peer vpn 。如果只有两个网络那也还好,但是万一以后扩展成 3 个网络了,那么如果中心节点挂了,那么整个网络都挂了

(这里假定家庭的环境的供电等各种环境不会那么稳定,同时假定云主机是 99.9% 稳定的)

是否有现成的 p2p vpn 方案,可以直接支持这种跨 IPv4 / IPv6 的场景呢?
bobryjosin
2024-02-06 20:00:36 +08:00
wireguard 可以配成 full mesh ,掉一个也不影响,所有节点都是直连,一个 conf 里面填上所有节点的公钥就可以了。
bobryjosin
2024-02-06 20:04:32 +08:00
如果有很多节点,中心节点,p2p 节点,躲在 nat 后面的混在一起,可以用 ospf ,单个中心节点掉线,依然可以通过其他路由器学习到目标对端的路由。
mantouboji
2024-02-06 20:21:37 +08:00
P 大的事情。R1 和 R2 之间用 wireguard 建隧道即可。LAN1 和 LAN2 最好不是同一个 IPv4 私有地址网段,比如不要都是 192.168.1.xx ,可以一个是.1 一个是.2 ,方便路由设计。

R1 和 R2 中的任何一个用 dynv6 、ipv64 之类的免费 ddns 做个动态域名,在另外一端跑个脚本,比如 RouterOS 的 netwatch ,每分钟检测一下隧道通断,断了就重启一下 wg 接口。
azure2024us
2024-02-06 20:58:51 +08:00
异地之间,用 wireguard ,stunnel 等,方案很多。

/t/910055
azure2024us
2024-02-06 21:04:56 +08:00
v6 地址 ddns

/t/853774
都有现成的方案。

把主题和问题先描述清楚。
JerryYuan
2024-02-06 21:12:30 +08:00
@nealot 目前正在用 wireguard+ddns+wireguard_watchdog ,调好以后基本上就没掉过线。wireguard 能搞点对点连接,ddns 帮你记录动态变化的地址,wireguard_watchdog 是个从 openwrt 的 luci-proto-wireguard 里扣出来的脚本,用来定时检测每个 peer 的链路是否还活着,断掉的就强制重新解析然后更新地址。
这个脚本能实现不重启端口地更新地址恢复链路,恢复其中一个边不影响其他边的链路。

剩下的就是 11 楼写的,两边用不同的网段,直接 AllowIPs 允许转发都就通了。
jiangzhexin
2024-02-06 22:21:28 +08:00
@nealot wireguard 并不存在中心服务器,它本身只有 peer 与 peer 连接,属于 p2p VPN ,这取决于你把 peer 之间的连接设计成树状(中心化)还是网状(分布式)的

任意一个 peer 发现某 peer 掉线,可以 reset endpoint ,此过程会重新解析 endpoint 的 dns ,连接上新的 ip ;掉线 peer 也会自动更新与该 peer 的连接
rkonfj
2024-02-06 22:33:23 +08:00
首推 tailscale ,
也可以调研并关注一下我最近开源的 PeerGuard 。
https://github.com/rkonfj/peerguard

这样的方案,R1 和 R2 的防火墙 inbound 可以全部禁止,更安全。
XiLingHost
2024-02-06 22:38:32 +08:00
wireguard 甚至可以像 DN42 一样每个子网都做成 peering 然后通过 BGP 或者 OSPF 来进行路由
nealot
2024-02-06 23:10:09 +08:00
@azure2024us 主题描述加了一些不必要的铺垫,可能重点不太突出。为了方便后面的读者,我重新叙述总结一下。

---

一直以来我都用 n2n + 公网 IPv4 来进行组网。我还用过 OpenVPN ,但没用过其它的。

本质上,类似 n2n 的 peer to peer vpn 工具,是在物理网络上建了一个 overlay 网络。这个 overlay 网络使用了加密、认证、打洞、转发等技术,方便我们打通多个 LAN 。

关于 IPv6 ,于是就有两个问题:

1. overlay 网络是否支持 IPv6
2. 外层承载网络 (物理网络) 是否支持 IPv6

我希望能够使用物理的 IPv6 网络,承载内层的 IPv4 payload 。

n2n 在 IPv4 时代是一个简单且恰好够用的工具,但是不支持 IPv6 https://github.com/ntop/n2n/issues/1116

于是我发帖询问 "通过 IPv6 公网 IP 打通多个 IPv4 LAN 网段" 比较适合的工具,同时希望避免 "整个网络的可靠性依赖单个宽带实例" 的问题

看起来,大家集中推荐的是 wireguard 和 tailscale ,并且对于现代化的工具,IPv6 承载 IPv4 完全不是什么问题
cnbatch
2024-02-07 17:17:36 +08:00
除了大家提到的那些,其实你原先使用的 OpenVPN 本身就可以做得到。
OpenVPN 并不是仅限 IPv4 的,实际上 IPv6 也能用。
nealot
2024-02-07 19:51:15 +08:00
@cnbatch 如果再仔细分一分,这些工具应该可以分成两类

1. 没有 ddns 很难处理动态 IP ,或者必需进行流量转发的 vpn
2. 天生的 p2p vpn ,可以没有任何 ddns ,支持 p2p 直连,但是需要一个协调节点 (不转发)

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

https://yangjunhui.monster/t/1014740

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

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

© 2021 V2EX