构建N2N虚拟局域网

某些游戏服务器实在是太不稳定了,延迟也长,严重影响和朋友的联机游戏体验,为了能异地一起照料远在星露谷的农场,果断选择搞个虚拟局域网联机。

服务器使用的是Ubuntu 16.04,本地的虚拟环境也是Ubuntu 16.04(不难为服务器小水管下载编译)
大概步骤分为下载源码,编译,交叉编译(客户端是windows,其实可以windows再搭环境然后在windows上编译,但是就是想折腾一会),部署运行
其实官方有镜像可以直接跑,网上也有别人编好的软件参考,但是考虑到上学期才学了计网和嵌入式,拿这做练手岂不是美滋滋
这里推荐一个博主,他使用的是CentOS,参考了许多,感觉很有价值。

N2N简介

N2N是指通过UDP方式,建立虚拟局域网的一种轻量级VPN,是全端口开放的VPN。其工作需要通过持有公网IP的中心节点中转,以此达到使不具有公网IP的客户端能够相互通信。在运行过程中,若两节点中网络结构合适,将会建立直连关系。

其软件包括Supernode(中心节点),和Edge(子节点)两部分。

官方github

装一下环境

1
2
sudo apt-get update
sudo apt-get install git cmake g++ g++-mingw-w64 openssl libssl-dev

clone n2n源码

n2n有三个版本,一个是旧版v1(v1.x),一个是新版v2(v2.x),一个是v2s(meyerd个人分支,曾经有段时间它的直连率和稳定性是最高的)

由于meyerd的分支已经停止维护,而且现在官方最新版是速度最快、直连率高的版本,本文采用的是V2官方版。

1
git clone https://github.com/ntop/n2n.git

编译服务器版本

1
2
3
4
5
6
7
./autogen.sh
./configure
make

# optionally install
# 可选装,不装就当前目录运行,一样的
make install

当然,你也可以直接装官方版本

1
sudo apt-get install n2n

完了之后可以测试一下, -h看文档同时还能看版本信息

编译Windows版本

Windows环境

这个部分是在windows上搭建windows环境,直接编译。不多bb,想看正片跳下一小节

官方教程

总结一下就是要:

  1. build-tools-for-visual-studio-2017
  2. Cmake
  3. Win32OpenSSL(完整版,不能是Light版)
  4. TAP(下一大节有教学)

交叉编译依赖库

因为有对OpenSSL的依赖,所以先交叉编译这个依赖库

1
git clone -b OpenSSL_1_1_1-stable https://github.com/openssl/openssl.git

建议是找个最新的stable版,本文写下时最新是1.1.1

1
2
CROSS_COMPILE="x86_64-w64-mingw32-" ./Configure mingw64 no-asm shared --prefix=$(pwd)/install
make && make install

no-asm: 在交叉编译过程中不使用汇编代码代码加速编译过程

shared: 生成动态连接库

–-prefix=: 安装路径

工具链配置

在项目目录建个.cmake文件

1
vim CMakeToolchainFile.cmake

把下面这段贴里面,可以按你具体机子改一下编译器,可以输个lscpu或者uname -a来看看

1
2
3
4
5
6
7
# the name of the target operating system
SET(CMAKE_SYSTEM_NAME Windows)

# which compilers to use for C and C++
SET(CMAKE_C_COMPILER /usr/bin/x86_64-w64-mingw32-gcc)
SET(CMAKE_CXX_COMPILER /usr/bin/x86_64-w64-mingw32-g++)
SET(CMAKE_RC_COMPILER /usr/bin/x86_64-w64-mingw32-windres)

编译

建一个build目录

1
2
mkdir build_windows
cd build_windows

cmake成功后进行make :

1
2
3
4
5
6
7
8
9
cmake \
-DCMAKE_TOOLCHAIN_FILE=../CMakeToolchainFile.cmake \
-DOPENSSL_USE_STATIC_LIBS=TRUE \
-DOPENSSL_ROOT_DIR=/opt/mingw64/ \
-DOPENSSL_INCLUDE_DIR=/opt/mingw64/include/ \
-DOPENSSL_CRYPTO_LIBRARY=/opt/mingw64/lib/ \
--config Release \
../
make

-DOPENSSL_ROOT_DIR: 指向 openssl 的 根目录
-DOPENSSL_INCLUDE_DIR: 指向 openssl 的 include 目录
-OPENSSL_CRYPTO_LIBRARY: 指向 openssl 的 lib 目录

完了之后会生成exe

如果没成比如说像我这样出错了:

那就对症下药,帮帮忙改吧,比如我图中的情况就改edge_utils里965行,把俩u_int8_t改成uint8_t就是了

如果要重新编译,直接rm -rf *把当前build目录(build_windows)生成的东西都清了

运行测试

服务器

把编译生成的supernode文件放到服务器你觉得合适的目录,当然你也可以直接install,这里不展开了。

./supernode -l 端口号

-l参数指定监听的端口,正常的话会输出:

后台挂起的话跑nohup ./supernode -l 端口号 &

注意开放这个端口号,防火墙,iptables,安全组策略之类的

可以用nc命令测试看看(n2n跑的是udp协议)

服务器nc -lu 端口号

客户端nc -vu 服务器ip 端口号

如果出现Connection to xx xx port [udp/*] succeeded!
说明连接上了,接下来随便打点什么,看服务器能不能收到东西,收到就说明端口ok。

客户端

Windows客户端需要安装TAP-Windows才能跑N2N服务

安装TAP-Windows

下载官网或者自用

因为现在openvpn似乎不直接提供tap-windows下载了,得下一整个安装包,然后只勾选tap-windows

安装完毕后会在网络适配器界面出现TAP-Windows Adapter V9

运行程序

把edge.exe拿出来,放你喜欢的位置,右键设管理员运行。

在同级目录开cmd

edge.exe -a 自定义虚拟局域网ip -c 组名 -k 组密码 -l 服务器ip:服务器端口

当然服务器ip也可以用服务器地址

例:edge.exe -a 192.168.100.1 -c mynetwork -k mysecretpass -l supernode.ntop.org:7777

跑成的话会有Rx REGISTER_SUPER_ACK myMAC=...的日志输出。

这时候说明连上服务器了,你可以叫上小伙伴,都连上服务器,然后相互ping下试试。

注意,多客户端同ip段不同ip,其他的服务器,端口,组名密码都要相同。

如果没成功ping通,可以尝试关了Windows自带的防火墙,或者第三方安全软件。

文章目录
  1. 1. N2N简介
  2. 2. 装一下环境
  3. 3. clone n2n源码
  4. 4. 编译服务器版本
  5. 5. 编译Windows版本
    1. 5.1. Windows环境
    2. 5.2. 交叉编译依赖库
    3. 5.3. 工具链配置
    4. 5.4. 编译
  6. 6. 运行测试
    1. 6.1. 服务器
    2. 6.2. 客户端
      1. 6.2.1. 安装TAP-Windows
      2. 6.2.2. 运行程序