Skip to main content

n2n

  • ntop/n2n 是什么?
  • 中心节点 - supernode
  • 单线程
  • 参考
  • supernode
    • 7654/udp - 主要
    • 7654/tcp - 辅助
    • 5645/udp - 管理
  • edge
    • 5644/udp - 管理
caution
  • bridge 支持有点问题
  • 没有可用的 ios 应用 - ntop/n2n#381
# macOSbrew install --cash tuntapbrew install openssl cmake
# Make./autogen.sh# CFLAGS 可启用本地指令优化./configure CFLAGS="-O3 -march=native"make
# CMakemkdir -p build && cd buildcmake -DOPENSSL_ROOT_DIR=/usr/local/opt/openssl ../make# 不想安装可直接使用 - 会安装到 /usr/local/sbin# make install
./edge --help
# -r -a dhcp:0.0.0.0N2N_KEY=$(cat /dev/urandom | env LC_CTYPE=C tr -dc 'a-zA-Z0-9' | head -c 32)sudo N2N_KEY=$N2N_KEY edge  -c community -l 127.0.0.1:7654 -f -a 10.20.1.1
# supernode mgmtnc -u 127.0.0.1 5645# edge mgmtnc -u 127.0.0.1 5644

选项#

edge 2.8

flagparamdesc
-dtun devicetun 设备名字 - 否则就是 tun0 这样的名字
-amode:address地址 - DHCP 可使用 '-r -a dhcp:0.0.0.0'
-ccommunitycommunity 名字
-kencrypt keyN2N_KEY
-snetmask掩码 - 255.255.255.0 格式
-l,supernode-listhost:portSupernode 地址:端口
-ireg_interval注册间隔,用于 NAT 穿透 - 默认 20 秒
-Lreg_ttlNAT 穿透 时 UDP 注册的 TTL - 默认 0 未设置
-plocal port本地固定 UDP 端口
-uUID运行 UID
-gGID运行 GID
-f前台运行
-mMAC address固定 mac 地址
-Mmtu接口 MTU - 默认 1290
-D启用 PMTU 发现 - 支持场景可减少分包,不支持可能导致包延时
-r启用包转发
-H头加密 - 要求 supernode 配置固定 community
-z,z1,z2包压缩 - -z1 or -z = lzo1x (default=disabled).
-E支持多播 MAC - 默认丢弃
-S不尝试 P2P - 通过 supernode 中转
-TtosTOS for packets - 例如 SSH 为 0x48
-ncidr:gateway路由给定网络 - 可使用 0.0.0.0/0 路由默认网络
-v详细日志 - 可多次指定
-tport管理 UDP 端口

加密#

  • n2n 内建算法 - 也可以编译的时候 link openssl
  • 通过 -k $KEY 或者 N2N_KEY 提供密钥
  • 默认 -A3/AES
  • -A1 为不加密,不提供 -k 时的默认
FlagCipherModeBlock SizeKey SizeIV lengthSpeedBuilt-InOrigin
-A2TwofishCTS128 bits256 bit128 bit-..OYBruce Schneier
-A3AESCTS128 bits128, 192, 256 bit128 bitO..+YJoan Daemen, Vincent Rijmen, NSA-approved
-A4ChaCha20CTRStream256 bit128 bit+..++YDaniel J. Bernstein
-A5SPECKCTRStream256 bit128 bit++YNSA

NOTES#

  • 多个 supernode 可组联邦 - community=*Federation
    • 实现备份、容灾和负载均衡 - 避免 DDoS
    • edge 可以连一个或多个
    • 名字可 -F 指定,默认 *Federation
  • 2.9 实现 认证 - 之前使用 MAC
    • 支持基于 edge 提供的标识信息
    • 支持 user/password 模式
      • 使用 n2n-keygen 生成
      • sn 在 community.list 中添加生成的信息
    • edge -I ${USERNAME} -J ${PASSWORD} -A5/-A4 -k ${N2N_KEY} -P ${SN_PUB_KEY}
    • 需要用到 头 加密
  • community
    • 19 byte - 不允许包含 .*+?[]\
    • 支持正则匹配 - 例如 net[0-9] 或者 net\d
    • 默认 明文传输 - 除非开启 头 加密
    • 开启 头 加密后名字不能使用正则 - 只能是固定名字
      • 可以使用 .* 来允许任意
    • 可被认为是简单的密码 - 只有知道 community 才能加入网络