N2N服务端的几种验证方式

N2N 2023/01/12

有一些朋友自建的N2N服务端(supernode),又不想服务端被公开连接,可以尝试以下几种方法

系统自带防火墙

这里说的防火墙可以是firewalld\ufw\iptables等,仅允许指定的IP访问服务端

但这个方法比较暴力,而且现在的家庭宽带大都是动态IP,不具有普适性

组名称白名单(community.list)

supernode支持启动时加载一个包含虚拟局域网小组名称的文件列表(记为community.list),格式为

#允许连接到supernode的组名称列表,一行一个,例如
bugxia
wenming6
#同时也支持正则形式的小组名称,例如bugxia00~bugxia19,可以这么表述
bugxia[0-1][0-9]
#另外还支持用户名\密码的验证形式,使用方法见后文
easyn2n
* bugxia h85UFJY3Hz7irnoiHBXjZo-lH9tga+Vl+5ANnDN5G68
* easyn2n Z3EHfiKHYEUJVpx9wcQVD2uVEGpT1wtNgRJLEhidPmu

启动supernode时,使用附加参数 -c 白名单文件路径 启动即可,如

supernode -p 18457 -c /root/community.list

启动后,客户端(edge)仅能使用白名单内包含的组名称进行连接

基于用户/密码的身份验证

除上述方法,supernode还支持用户名\密码的方法进行认证

该功能需要先通过N2N的密码工具(n2n-keygen),将允许连接的用户名密码进行加密

下载

Windows

n2n-keygen x64 for Windows:n2n-keygen.zip

Linux

通过源码自编译

加密

比如,用户名 bugxia,密码 testpassword

n2n-keygen bugxia testpassword

得到一串加密的字符串

#格式:*[空格]用户名[空格]密钥
* bugxia h85UFJY3Hz7irnoiHBXjZo-lH9tga+Vl+5ANnDN5G68

配置community.list

将上述字符串(完整格式,包含整行开头的*星号)以及自定义的小组名称保存到 community.list,格式如下:

wenming6
* bugxia h85UFJY3Hz7irnoiHBXjZo-lH9tga+Vl+5ANnDN5G68
* easyn2n Z3EHfiKHYEUJVpx9wcQVD2uVEGpT1wtNgRJLEhidPmu

上述配置中,wenming6 表示允许连接的小组名

后面的表示wenming6小组下的允许使用的用户名(示例为bugxia和easyn2n)及对应的密钥

使用附加参数 -c 白名单文件路径 启动supernode

客户端

客户端这边将上述综合,小组名称必须使用community.list里指定的小组名

附加参数中添加 -I 用户名 、-J 密码-k 小组密码-A4或-A5 启动,如图

所有加入同一小组的不同客户端,必须保证上述四个参数是一致的

官方说明文档:https://github.com/ntop/n2n/blob/dev/doc/Authentication.md

本文标签:


32条评论

  • 456 评论于 回复

    -k的参数是小组密码还是用户密码,如是小组密码的话在哪里配置

  • 一叶知秋 评论于 回复

    请问n2n可以支持链路切换,比如客户端一个网卡down掉,可以自动切换到另一个网卡吗

  • Kelun 评论于 回复

    各位有遇過基於帳號密碼的supernode無法啟動的問題嗎?我不論在Linux還是Windows,啟動同樣的帶帳號密碼的supernode最後都停在一樣的地方,程序就終止了

    05/Dec/2023 01:45:24 [sn_utils.c:395] added allowed community ‘N2NGroup’ [total: 1]
    05/Dec/2023 01:45:24 [sn_utils.c:1296] assigned sub-network 10.222.10.0/24 to community ‘N2NGroup’
    05/Dec/2023 01:45:24 [sn_utils.c:340] added user ‘HomeServer’ with public key ‘rkt9LCIxkfadwpKcGq0QW9FznTI43JKIbPhy5wsYQmm’ to community ‘N2NGroup’
    05/Dec/2023 01:45:24 [sn_utils.c:440] loaded 1 fixed-name communities from ./community.list
    05/Dec/2023 01:45:24 [sn_utils.c:443] loaded 0 regular expressions for community name matching from ./community.list
    05/Dec/2023 01:45:24 [sn_utils.c:115] started shared secrets calculation for edge authentication
    05/Dec/2023 01:45:24 [sn_utils.c:131] calculated shared secrets for edge authentication
    05/Dec/2023 01:45:24 [sn_utils.c:140] calculating dynamic keys

    community. list
    N2NGroup
    * HomeServer rkt9LCIxkfadwpKcGq0QW9FznTI43JKIbPhy5wsYQmm

    指令
    .\supernode.exe -p 60666 -c “D:\N2N\community.list” -v

  • A 评论于 回复

    为什么非白名单小组名也可以出现绿勾
    [root@VM-4-12-centos ~]# supernode -p 9527 -c /root/community.list
    19/Aug/2023 15:22:20 [sn_utils.c:445] loaded 1 fixed-name communities from /root/community.list
    19/Aug/2023 15:22:20 [sn_utils.c:448] loaded 0 regular expressions for community name matching from /root/community.list
    19/Aug/2023 15:22:20 [sn_utils.c:136] calculated shared secrets for edge authentication

  • 青木沧海 评论于 回复

    基于用户/密码的身份验证,会导致崩溃,目前未知错误原因,希望修复

  • heihx 评论于 回复

    对community.list进行修改的话是立即生效还是要重启服务器端才能生效呢

    • Bug侠 评论于 回复

      @heihx
      有API可以实时生效(但需要开发),最简单的也是最暴力的还是重启一下服务 :笑哭:

  • 富贵 评论于 回复

    目前指定的小组已经搞定了
    只有指定小组的时候登陆正常
    但是在添加了账号密码以后连接就分配不到IP
    community.list设置为:
    game1 192.168.60.0/24
    game2 192.168.61.0/24
    game3 192.168.62.0/24
    * 123 AOM3z+YkXmvwhmwXCh1hipf0ezuz40d2W7xcsPgGG3u

    服务器启动参数为:
    -v
    -c D:\EasyN2N\community.list

    客户端登陆参数:
    -I 123
    -J 123
    -A4
    -k game3
    -E
    -i 5
    -x 1

    迟迟分配不到IP 客户端log:
    [2023-04-09 05:16:11] adding supernode = 11.253.11.23:58888
    [2023-04-09 05:16:11] WARNING: using default federation public key; FOR TESTING ONLY, usage of a custom federation name and key (-P) is highly recommended!
    [2023-04-09 05:16:11] using username and password for edge authentication
    [2023-04-09 05:16:11] enabling header encryption for edge authentication
    [2023-04-09 05:16:11] starting n2n edge 3.1.1-16-g23e168b-dirty-r1200 x64_static May 8 2022 23:45:52
    [2023-04-09 05:16:11] using compression: none.
    [2023-04-09 05:16:11] using ChaCha20 cipher.
    [2023-04-09 05:16:11] WARNING: community and encryption key must differ, otherwise security will be compromised
    [2023-04-09 05:16:11] number of supernodes in the list: 1
    [2023-04-09 05:16:11] supernode 0 => 11.253.11.23:58888
    [2023-04-09 05:16:11] Header encryption is enabled.
    [2023-04-09 05:16:11] successfully created resolver thread
    [2023-04-09 05:16:11] successfully created port mapping thread
    [2023-04-09 05:16:11] automatically assign IP address by supernode
    [2023-04-09 05:16:11] send REGISTER_SUPER to supernode [11.253.1.23:58888] asking for IP address
    [2023-04-09 05:16:13] WARNING: NAT-PMP invalid response type 9856
    [2023-04-09 05:16:14] send REGISTER_SUPER to supernode [11.253.1.23:58888] asking for IP address
    [2023-04-09 05:16:15] UPnP added TCP port mapping: 10.31.0.109:52850 -> 192.168.2.52:52850
    [2023-04-09 05:16:16] UPnP added UDP port mapping: 10.31.0.109:52850 -> 192.168.2.52:52850
    [2023-04-09 05:16:17] send REGISTER_SUPER to supernode [11.253.1.23:58888] asking for IP address
    [2023-04-09 05:16:18] send REGISTER_SUPER to supernode [11.253.1.23:58888] asking for IP address
    [2023-04-09 05:16:19] send REGISTER_SUPER to supernode [11.253.1.23:58888] asking for IP address
    后续都是send REGISTER_SUPER to supernode [11.253.1.23:58888] asking for IP address
    (ip已做修改无泄露)

    无论连接game1还是game3都是一样的
    本意是想3个组的账号可以通用 实在不行复制黏贴也行
    请bug侠指点 可有偿

    • 富贵 评论于 回复

      @富贵
      同时还发生了一个情况
      我添加了一个新的用户进去以后 启动服务端就崩溃
      系统是Windows Server Windows_2012R2_standard
      去掉*开头的用户部分就不会崩溃了

  • 321 评论于 回复

    设置好community.list白名单后,启动服务端,客户端也按照图片设置了,怎么一直拿不到IP地址

    • 321 评论于 回复

      @321
      刚看了下,服务端自动关闭了,只设置小组名称是可以启动的,一旦加上用户密码就自动关闭服务端了,格式是按照上面带星号完整粘贴的

    • Sharky 评论于 回复

      @321
      同。设置了一个community.list 里面包含了一个白名单组名没有用户密码验证 以及另一个组名需要用户密码验证 在不需要用户密码的组名下 测试可以互相ping的通 但是在需要用户密码验证的组名下 设置好附加参数 出现小绿勾 但互相ping不通

    • Sharky 评论于 回复

      @321
      已解决 原来-k的 key 部分是独立的 并不是与密码一样 用了用户密码认证的小伙伴 需要加密方式相同 且 -k key参数需要一致 不然无法进行通信

      • Bug侠 评论于 回复

        @Sharky
        Sorry,我的失误,少写了一句话 :咧嘴:

      • 富贵 评论于 回复

        @Sharky
        你好
        我在部署小组和账号登录的时候也碰到了你类似的情况
        配置小组没问题 添加账号密码以后服务端就会崩溃
        能指点一下么谢谢

  • yue 评论于 回复

    n2n-keygen x64 for Windows:n2n-keygen.zip
    为啥 我一运行 就一闪就退了!哪里出问题了?谢谢!

  • 咸鱼 评论于 回复

    你好bug侠 有没有联系方式想咨询一下udp转tcp办法

  • wubozh 评论于 回复

    你好,Bug侠!
    最近使用n2n把家里、单位和手机连成了一个局域网,确实很方便。但现在遇到一个比较棘手的问题,就是,我家里有ipv6环境(电信),单位的办公电脑能上网但没有ipv6环境,现在想让家里的路由器(有公网IP和ipv4/ipv6双栈,172.16.1.1)通过n2n给单位的办公电脑(172.16.1.8)分配ipv6地址和转发ipv6数据,不知道能实现不?(看网上的说明,n2n的ipv4隧道能搭载ipv6数据)具体应该怎么操作?

  • c.w.l 评论于 回复

    BUG侠你好啊!从你这里学到超多东西的。从为了和朋友异地组局玩游戏到零基础学Docker,把服务部署到docker上(啧啧啧,我真厉害(doge))。想请教一下linux有客户端可以用吗?Linux服务端运行了之后,如果我想共享服务端的某些资源给客户端,我可以怎么操作呢?盼答复,谢谢。

    • Bug侠 评论于 回复

      @c.w.l
      感谢支持~N2N Linux客户端程序:
      自编译:https://bugxia.com/2508.html
      预编译:https://github.com/lucktu/n2n/tree/master/Linux
      教程不用写了吧,一行命令就启动了
      https://bugxia.com/2396.html

      • c.w.l 评论于 回复

        @Bug侠
        非常感谢!很有用!还有一个问题就是edge怎么关掉? :笑哭: 我在centos7只能重启服务器去关。。囧

        • Bug侠 评论于 回复

          @c.w.l
          killall edge
          如果没装killall,用下面的安装
          yum install psmisc -y

          • c.w.l 评论于 回复

            @Bug侠
            好的好的!感谢啦

  • km 评论于 回复

    Bug侠下午好,请问文中提到的n2n-keygen在那里获取?在Windows能用吗?

    • Bug侠 评论于 回复

      @km
      已补充 n2n-keygen x64 for Windows :咧嘴:

    • Bug侠 评论于 回复

      @km
      我又回看了一下本文,发现有很多纰漏,现已纠正 :笑哭:

  • 123 评论于 回复

    手机版hin2n的Encrypt key如何使用?

    • Bug侠 评论于 回复

      @123
      手机端的Encrypt key 就是密码,附加参数 -k 参数

    评论(本站已开启评论回复邮件通知功能,请如实填写邮箱以便及时收到回复)关闭回复