N2N 对等VPN网络
n2n是一个二层的虚拟专网,允许用户开发网络中典型的P2P应用而不是在应用层开发。这就意味着用户可以透明的得到本地地址,只要新的IP地址在一个子网内,无论两台机器处于什么位置都能够ping通对方。
N2N网络的主要特点:
- n2n网络是基于P2P协议的二层加密网络
- 加密是在节点上完成的,而且使用的是用户的自定义密钥;你控制自己的安全,而不用让比如skype代表你(管理你的服务器节点)
- 每个n2n用户可以同时属于多个网络
- 能够反向的穿越NAT和防火墙,因此n2n节点即使在内网也是能够被访问到的,因此防火墙不再是IP级别直接通讯的障碍。
- n2n网络并没有设计成独立的(自包含的),但是可能能够在n2n和非n2n网络之间路由数据。
n2n构架是基于两个部分的:
终端节点:安装在用户计算机上的应用使n2n网络被创建。每个节点设备都会创建一个TUN/TAP虚拟网卡设备作为接入n2n网络的入口点。
超级节点:作用是使终端节点能够访问到对称防火墙后面的其他终端节点。这个程序是那些无法直接通讯节点的目录记录器和包路由器。
从图上可以看出,SuperNode作用是进行转发等通讯,因为其在公网,可以将两个内网的Edge节点连接起来。
- #!/bin/sh /etc/rc.common
- # Copyright (C) 2008-2012 OpenWrt.org
- START=90
- start_instance() {
- local cfg="$1"
- config_get type "$cfg" TYPE
- case "$type" in
- edge)
- config_get ipaddr "$cfg" 'ipaddr'
- [ -n "$ipaddr" ] || return 1
- config_get supernode "$cfg" 'supernode'
- config_get port "$cfg" 'port'
- config_get community "$cfg" 'community'
- config_get key "$cfg" 'key'
- config_get_bool route "$cfg" 'route' '0'
- [ "$route" = "1" ] && args='-r'
- service_start /usr/sbin/edge -f $args -a $ipaddr -c $community -k $key -l ${supernode}:${port}
- ;;
- supernode)
- config_get port "$cfg" port
- [ -n "$port" ] || return 1
- service_start /usr/sbin/supernode -l $port
- ;;
- esac
- }
- stop_instance() {
- local cfg="$1"
- config_get type "$cfg" TYPE
- case "$type" in
- edge)
- service_stop /usr/sbin/edge
- ;;
- supernode)
- service_stop /usr/sbin/supernode
- ;;
- esac
- }
- start() {
- config_load 'n2n'
- config_foreach start_instance 'edge'
- config_foreach start_instance 'supernode'
- }
- stop() {
- config_load 'n2n'
- config_foreach stop_instance 'edge'
- config_foreach stop_instance 'supernode'
- }
从对应的启动文件可以看出,使用非常的简单。
- config edge
- option ipaddr ''
- option supernode ''
- option port ''
- option community ''
- option key ''
- option route ''
下面的内容是我的两台主机和服务器之间的通讯输出Debug信息
- 10/Sep/2013 23:51:47 [ n2n.c: 49] Marshalling hdr: public_ip=(2)0.0.0.0:0, private_ip=(2)0.0.0.0:7654
- 10/Sep/2013 23:51:47 [ n2n.c: 638] 84 bytes compressed into 87
- 10/Sep/2013 23:51:47 [ n2n.c: 681] ### Tx N2N Msg -> network
- 10/Sep/2013 23:52:17 [ n2n.c: 843] Purging old registrations
- 10/Sep/2013 23:52:17 [ n2n.c: 848] Remove 0 registrations
- 10/Sep/2013 23:52:22 [ n2n.c: 49] Unmarshalled hdr: public_ip=(2)0.0.0.0:0, private_ip=(2)0.0.0.0:50000
- 10/Sep/2013 23:52:22 [ n2n.c: 540] +++ Received unreliable data packet [rcvd_from=60.215.250.204:50000][msg_type=MSG_TYPE_REGISTER][seq_id=0]
- 10/Sep/2013 23:52:22 [ n2n.c: 545] [src_mac=DE:AD:BE:EF:01:23][dst_mac=00:00:00:00:00:00][original_sender=0.0.0.0:0]
- 10/Sep/2013 23:52:22 [supernode.c: 312] Received message from node [60.215.250.204:-15536]
- 10/Sep/2013 23:52:22 [ n2n.c: 49] Unmarshalled hdr: public_ip=(2)60.215.250.204:50000, private_ip=(2)0.0.0.0:50000
- 10/Sep/2013 23:52:22 [ n2n.c: 49] Marshalling hdr: public_ip=(2)0.0.0.0:0, private_ip=(2)0.0.0.0:7654
- 10/Sep/2013 23:52:22 [ n2n.c: 49] Unmarshalled hdr: public_ip=(2)0.0.0.0:0, private_ip=(2)0.0.0.0:7654
- 10/Sep/2013 23:52:22 [ n2n.c: 736] Sent unreliable packet [msg_type=MSG_TYPE_REGISTER_ACK][seq_id=0][src_mac=00:00:00:00:00:00][dst_mac=DE:AD:BE:EF:01:23]
- 10/Sep/2013 23:52:22 [ n2n.c: 49] Marshalling hdr: public_ip=(2)0.0.0.0:0, private_ip=(2)0.0.0.0:7654
- 10/Sep/2013 23:52:22 [ n2n.c: 638] 84 bytes compressed into 87
- 10/Sep/2013 23:52:22 [ n2n.c: 681] ### Tx N2N Msg -> network
- 10/Sep/2013 23:52:47 [ n2n.c: 49] Unmarshalled hdr: public_ip=(2)0.0.0.0:0, private_ip=(2)0.0.0.0:50001
- 10/Sep/2013 23:52:47 [ n2n.c: 540] +++ Received unreliable data packet [rcvd_from=60.215.250.204:50001][msg_type=MSG_TYPE_REGISTER][seq_id=0]
- 10/Sep/2013 23:52:47 [ n2n.c: 545] [src_mac=DE:AD:BE:EF:01:24][dst_mac=00:00:00:00:00:00][original_sender=0.0.0.0:0]
- 10/Sep/2013 23:52:47 [supernode.c: 312] Received message from node [60.215.250.204:-15535]
- 10/Sep/2013 23:52:47 [ n2n.c: 49] Unmarshalled hdr: public_ip=(2)60.215.250.204:50001, private_ip=(2)0.0.0.0:50001
- 10/Sep/2013 23:52:47 [ n2n.c: 49] Marshalling hdr: public_ip=(2)0.0.0.0:0, private_ip=(2)0.0.0.0:7654
- 10/Sep/2013 23:52:47 [ n2n.c: 49] Unmarshalled hdr: public_ip=(2)0.0.0.0:0, private_ip=(2)0.0.0.0:7654
- 10/Sep/2013 23:52:47 [ n2n.c: 736] Sent unreliable packet [msg_type=MSG_TYPE_REGISTER_ACK][seq_id=0][src_mac=00:00:00:00:00:00][dst_mac=DE:AD:BE:EF:01:24]
- 10/Sep/2013 23:52:47 [ n2n.c: 49] Marshalling hdr: public_ip=(2)0.0.0.0:0, private_ip=(2)0.0.0.0:7654
- 10/Sep/2013 23:52:47 [ n2n.c: 638] 84 bytes compressed into 87
- 10/Sep/2013 23:52:47 [ n2n.c: 681] ### Tx N2N Msg -> network
N2N 对等VPN网络的更多相关文章
- Azure Virtual NetWoker(一)对等互连网络
一,引言 Virtual NetWork Peering 可以无缝连接两个 Azure Virtual NetWork,Virtual NetWork Peering 直接的网络流量是专用的.在实际项 ...
- 用DotRas来连接VPN网络
最近要用程序来不断的连接VPN(为什么要这样就不讨论了),开始用的是如下代码: public static bool ADSL() { bool flag = true; do { Console.W ...
- [网络技术]VPN设置
1.解决VPN服务器默认路由困扰 现在移动办公已经变得家常便饭,每次外出出差办公需要访问单位的内网服务器时,该怎么办呢?相信很多人都想到了VPN连接!的确,使用VPN连接, 我们可以利用现成的Inte ...
- VPN拨号后使用本地网络上网
网络环境大概是这样了:我在家里用ADSL上网,通过VPN连接到公司的服务器.但是连接VPN后,只能登录到公司的服务器,与INTERNET就断开了,QQ.网页都断开了.公司的服务器应该是连网的,可能被限 ...
- VPN的分类方式
VPN的分类方式 VPN的分类方式比较混乱.不同的生产厂家在销售它们的VPN产品时使用了不同的分类方式,它们主要是产品的角度来划分的.不同的ISP在开展VPN业务时也推出了不同的分类方式,他们主 ...
- 001.网络TCP/IP工程知识点
一 互联网概述 计算机网络定义:由自主计算机互连起来的集合体. 计算机网络两大部分:硬件:计算机.通信设备.接口设备和传输介质. 软件:通信协议和应用软件. 广域网拓扑结构通常有:网状拓扑结构和环形拓 ...
- 数据中心网络架构的问题与演进 — 云网融合与 SD-WAN
目录 文章目录 目录 前文列表 云网融合 云网融合的应用场景 SD-WAN SD-WAN 的应用场景 企业组网互联 SD-EN 数据中心互联 SD-DCI 云间互联 SD-CX 企业用户接入云 数据中 ...
- Azure Site to Site VPN 配置手册
目录 1 Azure Site to Site VPN配置前的准备 1 1.1 设备兼容 1 1.2 网络要求和注意事项 1 2 配置Azure site t ...
- Neutron 理解(10):虚拟专用网(VPN)虚拟化 [How Neutron implements VPN Virtualization]
学习 Neutron 系列文章: (1)Neutron 所实现的虚拟化网络 (2)Neutron OpenvSwitch + VLAN 虚拟网络 (3)Neutron OpenvSwitch + GR ...
随机推荐
- SQL的数据类型
Character 字符串: 数据类型 描述 存储 char(n) 固定长度的字符串.最多 8,000 个字符. N的范围1-8000 varchar(n) 可变长度的字符串.最多 8,000 个字符 ...
- 类库探源——System.Type
一.MSDN 描述 Type 类:表示类型声明:类类型.接口类型.数组类型.值类型.枚举类型.类型参数.泛型类型定义.以及开放或封闭构造的泛型类型. 命名空间: System 程序集:mscorlib ...
- cocos2dx arpg单机手游
这只是一个DEMO. ARPG 单机手游, 个人DEMO. 支持剧情编辑, 支持气泡对话, 支持人物图像对话, 支持随时角色切换, 支持NPC跟随, 共同作战, 支持LUA扩展, 支持BUFF技能, ...
- 一个在线的C++帮助文档网站 转载
http://www.cplusplus.com/ //C++参考 http://www.cppreference.com/wiki/start //C++参考 http ...
- line-height行高使用技巧
若父元素标签高度一定,假设为150px,子元素需要垂直居中,再重新给子元素设置一个行高就好了,省事省力
- jQuery.ajax() datatype:“json" 转换失败
当使用jQuery.ajax() 时,如果设置dataType:"json",如果返回的字符转换出错则不会调用success方法,而进入error方法,控制台中也不会出现错误信息 ...
- yii2源码学习笔记(十六)
Module类的最后代码 /** * Registers sub-modules in the current module. * 注册子模块到当前模块 * Each sub-module shoul ...
- ExecuteNonQuery&& ExecuteQuery 区别
前些日子作一些数据项目的时候 在ADO.NET 中处理 ExecuteNonQuery()方法时,总是通过判断其返回值是否大于0来判断操作时候成功 .但是实际上并不是这样的,好在处理的数据操作多时 修 ...
- IOS 项目名称修改(XCODE4.6)
最近为了保存苹果商店已有版本软件,打算重新上传一个程序,与原来的软件仅样式不同.在修改网plist文件中的名称后,archive时报错了,结果发现时工程名称没有修改到.下面就与大家分享下修改已有项目名 ...
- Linux下Java 编译运行说明
命令行环境下Java编译运行 1. java的运行机制的基本概念: 源文件 也就是我们熟知的.java文件. 类文件 .class文件是编译器由.java文件编译而成.众所周知,Java的跨平台性在 ...