网站注销主体,广告设计公司任务书,黔西县城市建设局网站,下载网站模板后本地的网站会自动做跳转内网穿透、打洞工具有很多#xff0c;此前在windows上使用的是vidcc这个玩意#xff0c;也正因为linux不支持。自此在linux尝试过一些打洞工具#xff0c;ssh 反向代理这些#xff0c;因为安全性不便捷等多种原因#xff0c;最终选择了n2n。 由于初次接触n2n#xff0c;对…内网穿透、打洞工具有很多此前在windows上使用的是vidcc这个玩意也正因为linux不支持。自此在linux尝试过一些打洞工具ssh 反向代理这些因为安全性不便捷等多种原因最终选择了n2n。 由于初次接触n2n对其不是很了解就此对n2n实现内网穿透打洞过程进行基本表述。 2008年ntop的作者Luca Deri开始研究p2p V**他一方面看到公众对p2p V**有着强烈的需求另一方面又不满足已有产品的现状于是n2n诞生了。 如上图所示n2n是一个二层架构的V**网络其中super node提供场所让两个位于NAT/防火墙之后的edge node进行会面一旦双方完成首次握手剩下的数据流就之发生在两个edge node之间如果有一方的NAT属于对称型(symmetrical)super node则还需继续为双方提供数据包的转发;edge node负责数据流的加解密原理很简单。 至此我们已经了解部署n2n至少需要两台以上的机器。 我们此文采用两台centos。 centos7super node - 150.0.0.1 公网IP centos 7edge node- 192.168.1.121 虚拟机内网IP 使用n2n产生的虚拟网段将为 10.0.0.1 ~ 10.0.0.255 安装n2n 无论是edgenode还是supernode 都需要安装n2n所以下面安装方法通用提供两种n2n资源均可。 git clone https://github.com/meyerd/n2n.git or svn co https://svn.ntop.org/svn/ntop/trunk/n2n n2n分为v1和v2版本两种协议互不兼容。我们选择v2版本。 cd n2n/n2n_v2 安装openssl、cmake、git、gcc、net- yum install -y openssl-devel
yum install -y cmake
yum install -y net-tools
yum install -y git
yum install -y gcc gcc-c 编译安装n2n mkdir build
cd build
cmake ..
make make install n2n编译安装完会产生两个程序指令edge 和 supernode欠着是边缘节点使用客户端后者则是超级节点使用服务端。 supernode服务端运行 supernode -l 5000 超级节点开启5000端口进行监听以此来提供建交服务。 服务端也可以同时当做客户端使用将服务端加入到虚拟网络中。 edge -a 10.0.0.10 -c edge0 -k wss -l 150.0.0.1:5000 edgenode客户端运行 edge -a 10.0.0.11 -c edge0 -k wss -l 150.0.0.1:5000 10.0.0.11 这个IP是虚拟网段其他加入虚拟网络中的IP地址需要在同一网段统一key即wss可设置为其他。 此节点已有10.0.0.11这个IP所在的是n2n创建的虚拟网卡kill 掉edge 进程则此网卡销毁。 查看edge或者supernode 进程 ps -ef|grep supernodeps -ef|grep edge --help 本文提到的重要参数 -k wss 通讯私匙一般不用放在supernode节点可自行约定edge节点的私匙统一设置。 -M 1200 设置mtu -v -f 开启调试输出 调试 使用过程中不免遇到一些奇葩的事调试是个关键一些大的坑已经为你们踩过了剩下的基本没啥问题。 1.开启调试模式 记住先kill掉之前的edge 或 supernode进程再进行调试以免冲突。 附加参数即可 -v -f edge edge -a 10.0.0.11 -c edge0 -k wss -l 150.0.0.1:5000 -v -f supernode supernode -l 5000 -v -f 2.正常使用节点互相连接不通。 如果ping都不通怀疑是防火墙的问题测试请先直接关闭防火墙。完毕后将其恢复慢慢测试。 防火墙放行端口示例 iptables -I INPUT -p tcp --dport 5000 -j ACCEPT
iptables -I INPUT -p udp --dport 5000 -j ACCEPT
iptables save
service iptables restart 2.创建了客户端虚拟网卡没有ip 如果你开启调试模式了可能就会看到原来是ifconfig 命令不存在这个命令在net-tools包里centos那么就需要安装重新开启edge即可解决。 安装net-tools yum install -y net-tools 手动设置网卡IP可省略测试可以使用 ifconfig edge0 10.0.0.11 netmask 255.255.255.0 那么如果这步不成功的话自然网络没有配置建立好也就无法正常穿透内网。此时如果不开启调试模式你也看不到任何错误也就是很多人往往出现的配置好了却无法正常访问ping都不通何以解忧。 3.ping能通http和ssh却不通。 设置mtu值即可 edge -a 10.0.0.11 -c edge0 -k wss -l 150.0.0.1:5000 -M 1200 一般低于1400即可当前设置1200。不要忘了kill之前的进程哦 至此问题基本得以解决。 测试 10.0.0.10 (supernode、edge) 10不仅是超级节点也是边缘节点。 10.0.0.11edge无数边缘节点中其中一个 10 ping 11 11 ping 10 自此网络可以互相访问畅通无阻。如果你用你自己的电脑需要将其加入到虚拟网络中即可像局域网一样访问。 windows edge客户端软件 http://www.V**hosting.cz/n2nguien.exe http://sourceforge.net/projects/n2nedgegui/ 还要其他版本以及安卓版本自行搜捕。 nginx转发端口代理映射 最后我们将用nginx转发下公网IP端口到内网指定ip指定端口这样可以让外界不加入虚拟网络即可访问其中的节点机器。 用户客户端 》 公网IP150.0.0.1:6011》虚拟内网10.0.0.11:22 从流程来看我们的用户将访问公网IP的6011端口可以连接到内网机器10.0.0.11的22端口ssh。 首先关闭防火墙或放行公网6011端口连接 vi /etc/sysconfig/iptables 增加 -A INPUT -p tcp -m state --state NEW -m tcp --dport 6011 -j ACCEPT 安装nginxsupernode 详细请参照此文 注意需要转发tcp数据编译时附加参数--with-stream #安装编译支持库
mkdir /mnt/tools -p
cd /mnt/tools
yum -y install gcc automake autoconf libtool make
yum install gcc gcc-c#安装PCRE
wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.40.tar.gz
tar -xzf pcre-8.40.tar.gz -C ./
cd pcre-8.40
./configure --prefix/usr/local/pcre
make make install
cd ..#安装zlib
wget http://zlib.net/zlib-1.2.11.tar.gz
tar -xzf zlib-1.2.11.tar.gz -C ./
cd zlib-1.2.11
./configure --prefix/usr/local/zlib
make make install
cd ..#安装openss
wget https://www.openssl.org/source/openssl-1.0.2k.tar.gz
tar -xzf openssl-1.0.2k.tar.gz -C ./
#注意这里不需要进行安装后面步骤省略。#编译安装nginx
wget http://nginx.org/download/nginx-1.12.0.tar.gz
tar -xzf nginx-1.12.0.tar.gz -C ./
cd nginx-1.12.0./configure \
--prefix/usr/local/nginx \
--sbin-path/usr/local/nginx/nginx \
--conf-path/usr/local/nginx/nginx.conf \
--pid-path/usr/local/nginx/nginx.pid \
--with-http_ssl_module \
--with-pcre/mnt/tools/pcre-8.40/ \
--with-zlib/mnt/tools/zlib-1.2.11/ \
--with-openssl/mnt/tools/openssl-1.0.2k/ \
--with-stream#注cpre、zlib、openssl等依赖包的路径是解压的源码路径不是安装后的路径。make
make install 编译安装完毕后到nginx目录。 cd /usr/local/nginx/ 编辑配置nginx.conf stream {log_format proxy $remote_addr [$time_local] $protocol $status $bytes_sent $bytes_received $session_time $upstream_addr $upstream_bytes_sent $upstream_bytes_received $upstream_connect_time;access_log /var/log/nginx/tcp-access.log proxy ;open_log_file_cache off;include /usr/local/nginx/conf.d/*.stream;
} 创建日志目录 mkdir /var/log/nginx/ 创建模块配置目录并进入 mkdir /usr/local/nginx/conf.d/
cd /usr/local/nginx/conf.d/ 新建tcp.stream文件vi tcp.stream upstream TCP6011 {hash $remote_addr consistent;server 10.0.0.11:22;}server {listen 6011;proxy_connect_timeout 5s;proxy_timeout 300s;proxy_pass TCP6011;} 重载nginx cd .. ./nginx -s reload 使用putty连接 150.0.0.1:6011 成功连接10.0.0.11 因为是nginx代理请求所以来源是10.0.0.10而不是直接客户端。所以流量也会全部走supernode服务器而不直接交互。如果本地也配置到虚拟网络即建立连接通过supernode之后则直接互通。 详细请了解n2n官方这个项目已经不在维护但依然在广泛使用。 http://www.ntop.org/n2n/ https://sourceforge.net/projects/ntop/files/n2n/ https://www.buckhill.co.uk/blog/how-to-enable-broadcast-and-multicast-support-on-amazon-aws-ec2/2