n2n 动态路由器异地组网方案 [简单异地组网 Step by Step] - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
hiplon
V2EX    宽带症候群

n2n 动态路由器异地组网方案 [简单异地组网 Step by Step]

  •  1
     
  •   hiplon 2021-07-23 19:03:04 +08:00 5929 次点击
    这是一个创建于 1543 天前的主题,其中的信息可能已经有所发展或是发生改变。

    本文主要介绍通过 n2n 结合动态路由 RIP 的异地组网方案,经过近一年的使用,比较稳定,所以分享一下。

    ( 0 )前言及网络拓扑

    首先简单说一下组网的拓扑: Topo

    此前在 v 站和我的博客 也有陆续发过一些异地组网的方法:

    通过 N2N 组网并运行 OSPF 动态路由 on OpenWRT

    用动态路由打通各 Virtual L2 ( Zerotier )网络

    OpenWRT 结合 tinc 组自己的 SDLAN ( Step by Step )

    OpenWRT 搭建 WireGuard 服务器

    大家收藏点赞挺多的,就是没啥回复

    现在分享一下已经稳定运行一年多的方案,n2n + quagga-rip,方案只需一个带公网 IP 的服务器作握手 /中继(也可以用 n2n 官网提供的[不推荐]),在网络环境较好的情况下基本握手后可以实现直接穿透。

    ( 1 )安装配置 n2n

    n2n 软件 主要实现 peer-to-peer 虚拟组网功能,编译快速,配置简单,稳定。一般同类的软件有 zerotier, tinc, ... 本人基本都用过,综合考虑使用 n2n, 其它同类软件实现功能一样。

    SuperNode 节点:

    n2n SuperNode 节点类似于 zerotier 的 planet 或者 moons,用作握手或者中继,

    本文拓扑中 SuperNode 节点使用 Archlinux 服务器,可直接 pacman 安装,其它发行版可通过包管理或者自编译安装,非常简单。

    只需监听端口和 community(自定义字符串,和后面配置一致)即可

    $ supernode -h Welcome to n2n v.2.8.0 for x86_64-unknown-linux-gnu Built on Jan 22 2021 15:06:27 Copyright 2007-2020 - ntop.org and contributors supernode <config file> (see supernode.conf) or supernode -l <local port> -c <path> [-u <uid> -g <gid>] [-t <mgmt port>] [-v] -l <port> Set UDP main listen port to <port> -c <path> File containing the allowed communities. -u <UID> User ID (numeric) to use when privileges are dropped. -g <GID> Group ID (numeric) to use when privileges are dropped. -t <port> Management UDP Port (for multiple supernodes on a machine). -v Increase verbosity. Can be used multiple times. -h This help message. 

    EdgeNode 节点:

    EdgeNode 节点运行在各接入网段网关上,本人主要是运行其在各个拨号的 OpenWRT 路由器网关上,这样更加便利地将各个网段互联:

    OpenWRT 包管理中没有新版本 n2n,所以可以参考 n2n 2.8 for OpenWRT 是 OpenWRT 交叉编译的脚本,也有打包好的 ipk 安装包,当然也可以用其它方法

    安装完 edge 后,主要配置如下:(以拓扑中节点 X 为例)

    root@XMOPWRT:~# cat /etc/n2n/edge.conf -d=tincn0 -c=myperfectn2n //与前面 supernode 配置的 community(自定义字符串)一致 -a=10.193.111.14 //n2n 互联段 IP -A1 //不启用加密性能更好(视乎需求) -f -r # Enable packet forwarding [启用 N2N 包转发需要] -E # Accept multicast MAC addresses [启用动态路由需要] -l=supernode.ntop.org:7777 

    启动 n2n

    SuperNode

    systemctl enable n2n 

    EdgeNode

    /etc/init.d/edge enable /etc/init.d/edge start 

    内网 IP

    root@XMOPWRT:~# ip addr 5: br-lan: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP qlen 1000 link/ether 66:09:80:0e:c9:af brd ff:ff:ff:ff:ff:ff inet 10.193.14.1/24 brd 10.193.14.255 scope global br-lan valid_lft forever preferred_lft forever 11: tincn0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1290 qdisc fq_codel state UNKNOWN qlen 1000 link/ether 5e:36:f6:58:de:a8 brd ff:ff:ff:ff:ff:ff inet 10.193.111.14/24 brd 10.193.111.255 scope global tincn0 valid_lft forever preferred_lft forever inet6 fe80::5c36:f6ff:fe58:dea8/64 scope link valid_lft forever preferred_lft forever 

    至此,各个节点应该通过互联段可以互通。

    root@XMOPWRT:~# ping 10.193.111.11 PING 10.193.111.11 (10.193.111.11): 56 data bytes 64 bytes from 10.193.111.11: seq=0 ttl=64 time=20.020 ms ^C --- 10.193.111.11 ping statistics --- 1 packets transmitted, 1 packets received, 0% packet loss round-trip min/avg/max = 20.020/20.020/20.020 ms root@XMOPWRT:~# ping 10.193.111.10 PING 10.193.111.10 (10.193.111.10): 56 data bytes 64 bytes from 10.193.111.10: seq=0 ttl=64 time=15.340 ms ^C --- 10.193.111.10 ping statistics --- 2 packets transmitted, 1 packets received, 50% packet loss round-trip min/avg/max = 15.340/15.340/15.340 ms 

    ( 2 )安装配置 quagga

    主要通过 quagga 并通过 RIP 路由协议实现动态路由,

    各 EdgeNode 节点安装 quagga-ripd

    opkg install quagga-ripd quagga quagga-libzebra quagga-zebra quagga-watchquagga 

    安装完 quagga 后,主要配置如下:(以拓扑中节点 X 为例):

    root@XMOPWRT:~# cat /etc/quagga/ripd.conf password zebra ! router rip network 10.193.111.0/24 route 10.193.14.0/24 ! access-list vty permit 127.0.0.0/8 access-list vty deny any ! line vty access-class vty 

    启动 quagga-ripd

    EdgeNode

    /etc/init.d/quagga enable /etc/init.d/quagga start 

    至此,各个 EdgeNode 节点的 br-lan 网段应该通过可以互通。

    C:\Users\k>ipconfig Windows IP 配置 无线局域网适配器 WLAN: 连接特定的 DNS 后缀 . . . . . . . : lan IPv6 地址 . . . . . . . . . . . . : fd78:ecee:8a17:0:bcb2:17a9:71cd:8ea5 临时 IPv6 地址. . . . . . . . . . : fd78:ecee:8a17:0:79c1:4:2b1:b58f 本地链接 IPv6 地址. . . . . . . . : fe80::bcb2:17a9:71cd:8ea5%9 IPv4 地址 . . . . . . . . . . . . : 10.193.14.133 子网掩码 . . . . . . . . . . . . : 255.255.255.0 默认网关. . . . . . . . . . . . . : 10.193.14.1 C:\Users\k>ping 10.193.10.30 正在 Ping 10.193.10.30 具有 32 字节的数据: 来自 10.193.10.30 的回复: 字节=32 时间=14ms TTL=62 来自 10.193.10.30 的回复: 字节=32 时间=13ms TTL=62 10.193.10.30 的 Ping 统计信息: 数据包: 已发送 = 2,已接收 = 2,丢失 = 0 (0% 丢失), 往返行程的估计时间(以毫秒为单位): 最短 = 13ms,最长 = 14ms,平均 = 13ms Control-C ^C C:\Users\k>ping 10.193.11.9 正在 Ping 10.193.11.9 具有 32 字节的数据: 来自 10.193.11.9 的回复: 字节=32 时间=18ms TTL=62 10.193.11.9 的 Ping 统计信息: 数据包: 已发送 = 1,已接收 = 1,丢失 = 0 (0% 丢失), 往返行程的估计时间(以毫秒为单位): 最短 = 18ms,最长 = 18ms,平均 = 18ms Control-C ^C 

    ( 3 ) iptables 配置

    iptables -A input_rule -i tinc+ -j ACCEPT iptables -A forwarding_rule -i tinc+ -j ACCEPT iptables -A forwarding_rule -o tinc+ -j ACCEPT iptables -A output_rule -o tinc+ -j ACCEPT 

    为了安全或者一些避免部分特定情况导致网络访问不通,可以启用 SNAT(可选 /建议)

    iptables -t nat -A POSTROUTING -s 0.0.0.0/0 -o tincn0 -j SNAT --to 10.193.111.14 

    refer: https://vnf.cc/2021/07/n2n-rip-virtualnet/

    21 条回复    2021-07-27 01:06:40 +08:00
    acbot
        1
    acbot  
       2021-07-23 19:28:22 +08:00
    NB !
    jousca
        2
    jousca  
       2021-07-23 19:36:38 +08:00
    对于大佬作品必须先收藏感谢。
    Mast
        3
    Mast  
       2021-07-23 21:11:34 +08:00
    这肯定要收藏啊,谢谢。
    sunulin
        4
    sunulin  
       2021-07-23 21:15:57 +08:00 via iPhone
    我都是加 route 原来还有 quagga-ripd,谢谢又省好多事
    hiplon
        5
    hiplon  
    OP
       2021-07-23 21:53:19 +08:00
    @acbot
    @jousca
    @Mast
    感谢支持
    @sunulin
    和静态路由也各有各的好处的,节点设备多了写静态路由可是 n^2 维护量
    NealLason
        6
    NealLason  
       2021-07-23 23:30:11 +08:00
    尝试过 n2n 和 tinc,n2n 打洞效果比 tinc 好一些,但是速度太渣了,同等情况下,tinc 能跑 100M 的,n2n 才 30 多 M 。。
    hiplon
        7
    hiplon  
    OP
       2021-07-23 23:42:32 +08:00
    @NealLason 不开加密性能会提升很多
    willqianji
        8
    willqianji  
       2021-07-24 00:08:41 +08:00 via iPhone
    牛逼,请教 如果 运营商有 udp 限制影响大吗
    wwhc
        9
    wwhc  
       2021-07-24 04:54:14 +08:00
    不需要任何第三方软件,用 openssh 就能实现
    hiplon
        10
    hiplon  
    OP
       2021-07-24 08:38:42 +08:00
    @wwhc 组网和 openssh tunnel 的目的完全不一样
    @willqianji 肯定会有影响的
    wwhc
        11
    wwhc  
       2021-07-24 09:45:25 +08:00
    @hiplon 如果异地组网是目的,那么用 openssh 可以完整的实现,不需要第三方软件
    hiplon
        12
    hiplon  
    OP
       2021-07-24 10:26:23 +08:00
    @wwhc 或许是我孤陋寡闻还没见过 ethernet over ssh 的方案,如果你有此实现或许建议可以写个教程学习下
    NealLason
        13
    NealLason  
       2021-07-24 11:35:06 +08:00
    @hiplon 不开加密这玩意还有啥意义。。
    hiplon
        14
    hiplon  
    OP
       2021-07-24 11:45:38 +08:00
    @NealLason 鱼和熊掌不可兼得,结合自己的需求才是重要的。因为我自己的应用层全是 ssh,https 协议,所以我链路层选择性能最大化不加密。
    brMu
        15
    brMu  
       2021-07-24 16:38:48 +08:00
    一直在用 zerotier,请问大佬 n2n 比 zerotier 好的地方是什么?好有动力试一试
    hiplon
        16
    hiplon  
    OP
       2021-07-24 16:42:26 +08:00
    @brMu 最终实现的功能上是差不多的,n2n 主要配置简单可选,supernode 可控,最终资料自己掌握。zerotier 现在越来越多功能了,也可以自己组 moons,不过总有部分资料是要通过 zerotier 公司。我一般会启用 n2n 作主用,然后 zerotier 备用。
    evemoo
        17
    evemoo  
       2021-07-24 17:16:54 +08:00
    尝试在 openwrt 上用 n2n 给 ns 加速,没成功。
    wwhc
        18
    wwhc  
       2021-07-25 00:50:07 +08:00
    @hiplon 可以参考这个指南构建 openssh 异地组网的方案:help.ubuntu.com/community/SSH_VPN
    sbilly
        19
    sbilly  
       2021-07-26 18:29:18 +08:00
    在这个配置下,rip 跑起来协议要用多少带宽?
    hiplon
        20
    hiplon  
    OP
       2021-07-26 20:42:58 +08:00
    @sbilly rip 握手后每分钟就 1 个广播心跳包,几个 k
    jayvs5200
        21
    jayvs5200  
       2021-07-27 01:06:40 +08:00 via iPhone
    学习了
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2916 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 14:26 PVG 22:26 LAX 07:26 JFK 10:26
    Do have faith in what you're doing.
    (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) })(window,document,'script','//www.google-analytics.com/analytics.js','ga'); ga('create', 'UA-11940834-2', 'v2ex.com'); ga('send', 'pageview'); ga('send', 'event', 'Node', 'topic', 'bb'); ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86