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

289 天前
 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 出去 (即使是私网)

2765 次点击
所在节点    程序员
23 条回复
jiangzhexin
289 天前
使用 wireguard 在 R1 ,R2 上建立连接就好了,然后做好路由和防火墙放行
nealot
289 天前
@jiangzhexin IPv6 地址可能会变

另外不希望 Cloud VM 负责流量转发
azure2024us
289 天前
描述有些乱。

告诉你一个方法(使用 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
289 天前
写个检测脚本得了,发现不通就 reset endpoint ,虽然不算很优雅,但也算能用不是么
lovelylain
289 天前
ipv6 ddns ,openwrt 自带一个简单脚本 wireguard_watchdog ,加入 crontab 就行
@nealot
hronro
289 天前
tailscale + subnet, 如果能 P2P 的话 (两边都有 IPv6 公网 IP 的话应该很容易), 甚至不需要 Cloud VM
lixiangwuxian
289 天前
Cloud VM 上自建 headscale ,或者直接上 tailscale 也行,路由器侧也对应安装应用。虽然都是基于 wg 上层的实现应用,不过可以 ipv6 直连并且省去 DDNS 的麻烦。剩下搞好路由就可以了。
nealot
289 天前
@lovelylain @jiangzhexin 按我的理解,n2n 属于 peer to peer vpn ,每个节点 (edge) 在协调下,有直连的能力,但是 n2n 的 IPv6 支持比较有限

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

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

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

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

/t/910055
azure2024us
289 天前
v6 地址 ddns

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

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

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

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

这样的方案,R1 和 R2 的防火墙 inbound 可以全部禁止,更安全。
XiLingHost
289 天前
wireguard 甚至可以像 DN42 一样每个子网都做成 peering 然后通过 BGP 或者 OSPF 来进行路由
nealot
289 天前
@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
288 天前
除了大家提到的那些,其实你原先使用的 OpenVPN 本身就可以做得到。
OpenVPN 并不是仅限 IPv4 的,实际上 IPv6 也能用。
nealot
288 天前
@cnbatch 如果再仔细分一分,这些工具应该可以分成两类

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

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

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

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

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

© 2021 V2EX