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 出去 (即使是私网)
1
jiangzhexin 316 天前
使用 wireguard 在 R1 ,R2 上建立连接就好了,然后做好路由和防火墙放行
|
2
nealot OP |
3
azure2024us 316 天前
描述有些乱。
告诉你一个方法(使用 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 ,同一个段,或不同段都行,只有内部网络是互通的就行 |
4
jiangzhexin 316 天前
写个检测脚本得了,发现不通就 reset endpoint ,虽然不算很优雅,但也算能用不是么
|
5
lovelylain 316 天前 via Android
ipv6 ddns ,openwrt 自带一个简单脚本 wireguard_watchdog ,加入 crontab 就行
@nealot |
6
hronro 316 天前 1
tailscale + subnet, 如果能 P2P 的话 (两边都有 IPv6 公网 IP 的话应该很容易), 甚至不需要 Cloud VM
|
7
lixiangwuxian 316 天前 1
Cloud VM 上自建 headscale ,或者直接上 tailscale 也行,路由器侧也对应安装应用。虽然都是基于 wg 上层的实现应用,不过可以 ipv6 直连并且省去 DDNS 的麻烦。剩下搞好路由就可以了。
|
8
nealot OP @lovelylain @jiangzhexin 按我的理解,n2n 属于 peer to peer vpn ,每个节点 (edge) 在协调下,有直连的能力,但是 n2n 的 IPv6 支持比较有限
wireguard 在实现上,应该不属于 peer to peer vpn 。如果只有两个网络那也还好,但是万一以后扩展成 3 个网络了,那么如果中心节点挂了,那么整个网络都挂了 (这里假定家庭的环境的供电等各种环境不会那么稳定,同时假定云主机是 99.9% 稳定的) 是否有现成的 p2p vpn 方案,可以直接支持这种跨 IPv4 / IPv6 的场景呢? |
9
bobryjosin 316 天前 1
wireguard 可以配成 full mesh ,掉一个也不影响,所有节点都是直连,一个 conf 里面填上所有节点的公钥就可以了。
|
10
bobryjosin 316 天前
如果有很多节点,中心节点,p2p 节点,躲在 nat 后面的混在一起,可以用 ospf ,单个中心节点掉线,依然可以通过其他路由器学习到目标对端的路由。
|
11
mantouboji 316 天前 1
P 大的事情。R1 和 R2 之间用 wireguard 建隧道即可。LAN1 和 LAN2 最好不是同一个 IPv4 私有地址网段,比如不要都是 192.168.1.xx ,可以一个是.1 一个是.2 ,方便路由设计。
R1 和 R2 中的任何一个用 dynv6 、ipv64 之类的免费 ddns 做个动态域名,在另外一端跑个脚本,比如 RouterOS 的 netwatch ,每分钟检测一下隧道通断,断了就重启一下 wg 接口。 |
12
azure2024us 316 天前
|
13
azure2024us 316 天前
|
14
JerryYuan 316 天前 via Android
@nealot 目前正在用 wireguard+ddns+wireguard_watchdog ,调好以后基本上就没掉过线。wireguard 能搞点对点连接,ddns 帮你记录动态变化的地址,wireguard_watchdog 是个从 openwrt 的 luci-proto-wireguard 里扣出来的脚本,用来定时检测每个 peer 的链路是否还活着,断掉的就强制重新解析然后更新地址。
这个脚本能实现不重启端口地更新地址恢复链路,恢复其中一个边不影响其他边的链路。 剩下的就是 11 楼写的,两边用不同的网段,直接 AllowIPs 允许转发都就通了。 |
15
jiangzhexin 316 天前
@nealot wireguard 并不存在中心服务器,它本身只有 peer 与 peer 连接,属于 p2p VPN ,这取决于你把 peer 之间的连接设计成树状(中心化)还是网状(分布式)的
任意一个 peer 发现某 peer 掉线,可以 reset endpoint ,此过程会重新解析 endpoint 的 dns ,连接上新的 ip ;掉线 peer 也会自动更新与该 peer 的连接 |
16
rkonfj 316 天前 via iPhone 1
首推 tailscale ,
也可以调研并关注一下我最近开源的 PeerGuard 。 https://github.com/rkonfj/peerguard 这样的方案,R1 和 R2 的防火墙 inbound 可以全部禁止,更安全。 |
17
XiLingHost 316 天前
wireguard 甚至可以像 DN42 一样每个子网都做成 peering 然后通过 BGP 或者 OSPF 来进行路由
|
18
nealot OP @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 完全不是什么问题 |
19
cnbatch 315 天前
除了大家提到的那些,其实你原先使用的 OpenVPN 本身就可以做得到。
OpenVPN 并不是仅限 IPv4 的,实际上 IPv6 也能用。 |
20
nealot OP @cnbatch 如果再仔细分一分,这些工具应该可以分成两类
1. 没有 ddns 很难处理动态 IP ,或者必需进行流量转发的 vpn 2. 天生的 p2p vpn ,可以没有任何 ddns ,支持 p2p 直连,但是需要一个协调节点 (不转发) |
21
flynaj 311 天前 via Android
zerotier 最简单,性能好,
|
22
flynaj 311 天前 via Android
wireguard 需要折腾一下,也可以
|
23
flynaj 311 天前 via Android
zerotier 在后台添加路由
192.168.100.1 192.168.100.0/24 (LAN) 192.168.16.0/21 via 192.168.100.16 192.168.200.1/24 via 192.168.100.200 192.168.6.0/24 via 192.168.100.6 192.168.88.0/24 via 192.168.100.8 这样就连接了 4 个局域网,zerotier 是直连,其它很多软件大部分走的是中转 |