精华内容
下载资源
问答
  • 最简单的nat 转发
    2016-04-17 23:13:00

    针对需求

    嵌入式开发中,经常使用板子和笔记本通过网线直连,如果需要板子连接到外网,就比较尴尬。

    最简单方法,可以把板子接到局域网内,我们的笔记本通过局域网交换机连接到板子,可是,这样要很多修改 IP 的操作;通常情况下,这时,你还需要一台小交换机和几根网线在你桌子上。很麻烦对不对?

    这里提供了一个替代方法:可以配置笔记本 IPV4 转发,笔记本用 Wi-Fi 来连接到网络,然后,板子与笔记本有线连接的情况下,板子可以通过笔记本连接到外网。

    大致如下图:

     

    开发板修改

    1. 修改开发板 /etc/network/interface 文件,主要将 gateway 改为笔记本 IP。

    2. 重新插拔网线让配置生效。(可以ifdown后ifup,插拔网线更快些 :)

     

    笔记本(ubuntu,均需本机 root 权限):

    1. 使能本机的 ip_forward :  echo 1 > /proc/sys/net/ipv4/ip_forward

    2. 设置 iptables 规则:

    •  清除所有规则: iptables -F
    • 因为清除了所有,所以需要先允许 INPUT: iptables -P INPUT ACCEPT
    • 还需要允许 FORDWARD: iptables -P FORWARD ACCEPT
    • 允许 NAT 转发所有包到 wlan0:iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE

     

    可以使用下面两条指令来查看配置是否有效:

    1. 如果 ip_forward 是打开的,则输出 1: cat /proc/sys/net/ipv4/ip_forward

    2. iptables -nvL 看有哪些规则

     

    如果是只有一个网口的台式机,没办法,那你还是乖乖的找交换机和网线去吧~!

     

    搞了个脚本,免得每次手动敲:

    #!/usr/bin/env bash
    
    if [ -z $1 ]; then
        echo "usage: forward_to [eth0|wlan0]"
        exit 1
    fi
    
    if [ $(id -u) -ne 0 ]; then
        echo "Re-running script under sudo..."
        sudo "$0" "$@"
        exit 1
    fi
    
    echo 1 > /proc/sys/net/ipv4/ip_forward
    
    iptables -F
    iptables -P INPUT ACCEPT
    iptables -P FORWARD ACCEPT
    iptables -t nat -A POSTROUTING -o $1 -j MASQUERADE
    
    #dhcpd eth0 -pf /var/run/dhcp-server/dhcpd.pid

     

    更多相关内容
  • NAT穿越技术详细介绍

    多人点赞 热门讨论 2022-08-06 22:17:20
    本文收集并整理了关于NAT穿越的一些技术,介绍这些技术的实现过程,让大家对NAT穿越技术的相关内容有个初步的认识与了解。

    目录

    1、NAT介绍

    1.1、NAT和防火墙的定义

    1.2、NAT的四种类型

    1.3、NAT类型检查

    2、用于NAT穿越的STUN协议

    2.1、STUN协议介绍

    2.2、STUN协议的实现过程

    3、用于NAT穿越的TURN协议

    3.1、TURN协议介绍

    3.2、TURN协议的实现过程

    4、ICE穿越技术

    4.1、ICE介绍

    4.2、ICE实现过程


           本文收集并整理了关于NAT穿越的一些技术,介绍这些技术的实现过程,让大家对NAT穿越技术的相关内容有个初步的认识与了解。

    本文先介绍NAT的定义和类型,然后介绍穿越NAT的两个协议STUN和TURN,最后介绍ICE框架。

    1、NAT介绍

    1.1、NAT和防火墙的定义

    1.1.1、防火墙

           为了网络的安全性,公司一般都安装防火墙,它是一个放于私有网的设备,用来保护网络资源免受外部的恶意破坏。

           防火墙检查从外部进来的每个数据包的IP地址和目的端口号,它经常如此设置:如果防火墙内的一台计算机A向防火墙外的一台计算机B主动发出请求要数据,防火墙会让外部计算机B的数据包通过,而且当且仅当数据包的目的地址和端口号与防火墙内发起请求的计算机A的地址和端口号相同;如果计算机B发来的数据包仅仅目的地址是防火墙内发起请求的计算机A的地址,而端口号不是计算机A发出请求的那个端口号,防火墙也将会丢弃那个外来的数据包。

           防火墙总是被配置过滤掉所有不请自到的网络通信,有一个例外是在防火墙内提供Web Server供外部访问。在这种情况下,公司会配置防火墙允许目的地址是Web Server的IP地址且目的端口号为80的数据包通过,这就使得公司外部可以主动向公司的Web Server发起请求得到一些公司放在Server上的数据。

           防火墙又分软件防火墙和硬件防火墙。

    1.1.2、NAT

           网络地址转换(NAT)是一个Internet标准,置于两网间的边界,其功能是将外网可见的IP地址与内网所用的地址相映射,这样,每一受保护的内网可重用特定范围的IP地址(例如192.168.x.x),而这些地址是不用于公网的。从外网来的含公网地址信息的数据包先到达NAT,NAT使用预设好的规则(其组元包含源地址、源端口、目的地址、目的端口、协议)来修改数据包,然后再转发给内网接收点。对于流出内网的数据包也须经过这样的转换处理。

           NAT服务有两个主要目的:

    1)许多公司使用NAT用作一个网络安全设备,因为它隐藏了内部IP地址,如果黑客不知道特定计算机的IP地址,想要攻击那台计算机是更困难的。
    2)NAT让一个公司可以使用更多的内部IP地址,因为这些地址仅仅在内部使用,不可能与被别的公司和组织的IP地址产生冲突

    1.2、NAT的四种类型

           这里面涉及到几个概念,先介绍一下:

    1)内部Tuple:指内部主机的私有地址和端口号所构成的二元组,即内部主机所发送报文的源地址、端口所构成的二元组。
    2)外部Tuple:指内部Tuple经过NAT的源地址/端口转换之后,所获得的外部地址、端口所构成的二元组,即外部主机收到经NAT转换之后的报文时,它所看到的该报文的源地址(通常是NAT设备的地址)和源端口。
    3)目标Tuple:指外部主机的地址、端口所构成的二元组,即内部主机所发送报文的目标地址、端口所构成的二元组。

          四种NAT类型如下:

    1)Full Cone NAT(完全圆锥型NAT)

    所有来自同一个内部Tuple X的请求均被NAT转换至同一个外部Tuple Y,而不管这些请求是不是属于同一个应用或者是多个应用的。

    除此之外,当X-Y的转换关系建立之后,任意外部主机均可随时将Y中的地址和端口作为目标地址和目标端口,向内部主机发送UDP报文,由于对外部请求的来源无任何限制,因此这种方式虽然足够简单,但却不那么安全。
    2)Restricted Cone NAT(地址限制圆锥型NAT)

    它是Full Cone的受限版本。所有来自同一个内部Tuple X的请求均被NAT转换至同一个外部Tuple Y,这与Full Cone相同,但不同的是,只有当内部主机曾经发送过报文给外部主机(假设其IP地址为Z)后,外部主机才能以Y中的信息作为目标地址和目标端口,向内部 主机发送UDP请求报文,这意味着,NAT设备只向内转发(目标地址/端口转换)那些来自于当前已知的外部主机的UDP报文,从而保障了外部请求来源的安全性。
    3)Port Restricted Cone NAT(端口限制圆锥型NAT)

    它是Restricted Cone NAT的进一步受限版。只有当内部主机曾经发送过报文给外部主机(假设其IP地址为Z且端口为P)之后,外部主机才能以Y中的信息作为目标地址和目标端口,向内部主机发送UDP报文,同时,其请求报文的源端口必须为P,这一要求进一步强化了对外部报文请求来源的限制,从而较Restricted Cone更具安全性。
    4)Symmetric NAT(对称型NAT)

    这是一种比所有Cone NAT都要更为灵活的转换方式。在Cone NAT中,内部主机的内部Tuple与外部Tuple的转换映射关系是独立于内部主机所发出的UDP报文中的目标地址及端口的,即与目标Tuple无关; 在Symmetric NAT中,目标Tuple则成为了NAT设备建立转换关系的一个重要考量:只有来自于同一个内部Tuple 、且针对同一目标Tuple的请求才被NAT转换至同一个外部Tuple,否则的话,NAT将为之分配一个新的外部Tuple。

    打个比方,当内部主机以相 同的内部Tuple对2个不同的目标Tuple发送UDP报文时,此时NAT将会为内部主机分配两个不同的外部Tuple,并且建立起两个不同的内、外部 Tuple转换关系。与此同时,只有接收到了内部主机所发送的数据包的外部主机才能向内部主机返回UDP报文,这里对外部返回报文来源的限制是与Port Restricted Cone一致的。不难看出,如果说Full Cone是要求最宽松NAT UDP转换方式,那么,Symmetric NAT则是要求最严格的NAT方式,其不仅体现在转换关系的建立上,而且还体现在对外部报文来源的限制方面。

    1.3、NAT类型检查

           前提条件:有一个公网的Server并且绑定了两个公网IP(IP-1,IP-2)。这个Server做UDP监听(IP-1,Port-1)、(IP-2,Port-2)并根据客户端的要求进行应答。NAT类型监测的步骤为:

    1)检测客户端是否有能力进行UDP通信以及客户端是否位于NAT后?
    客户端建立UDP socket然后用这个socket向服务器的(IP-1,Port-1)发送数据包要求服务器返回客户端的IP和Port, 客户端发送请求后立即开始接受数据包,要设定socket Timeout(300ms),防止无限堵塞. 重复这个过程若干次。如果每次都超时,无法接受到服务器的回应,则说明客户端无法进行UDP通信,可能是防火墙或NAT阻止UDP通信,这样的客户端也就不能P2P了(检测停止)。 
    当客户端能够接收到服务器的回应时,需要把服务器返回的客户端(IP,Port)和这个客户端socket的 (LocalIP,LocalPort)比较。如果完全相同则客户端不在NAT后,这样的客户端具有公网IP可以直接监听UDP端口接收数据进行通信(检测停止)。否则客户端在NAT后要做进一步的NAT类型检测(继续)。
    2)检测客户端NAT是否是Full Cone NAT?
    客户端建立UDP socket然后用这个socket向服务器的(IP-1,Port-1)发送数据包要求服务器用另一对(IP-2,Port-2)响应客户端的请求往回发一个数据包,客户端发送请求后立即开始接受数据包,要设定socket Timeout(300ms),防止无限堵塞. 重复这个过程若干次。如果每次都超时,无法接受到服务器的回应,则说明客户端的NAT不是一个Full Cone NAT,具体类型有待下一步检测(继续)。如果能够接受到服务器从(IP-2,Port-2)返回的应答UDP包,则说明客户端是一个Full Cone NAT(检测停止)。
    3)检测客户端NAT是否是Symmetric NAT?
    客户端建立UDP socket然后用这个socket向服务器的(IP-1,Port-1)发送数据包要求服务器返回客户端的IP和Port, 客户端发送请求后立即开始接受数据包,要设定socket Timeout(300ms),防止无限堵塞. 重复这个过程直到收到回应(一定能够收到,因为第一步保证了这个客户端可以进行UDP通信)。
    用同样的方法用一个socket向服务器的(IP-2,Port-2)发送数据包要求服务器返回客户端的IP和Port。
    比较上面两个过程从服务器返回的客户端(IP,Port),如果两个过程返回的(IP,Port)有一对不同则说明客户端为Symmetric NAT(检测停止)。否则是Restricted Cone NAT,是否为Port Restricted Cone NAT有待检测(继续)。
    4)检测客户端NAT是否是Restricted Cone NAT还是Port Restricted Cone NAT?
    客户端建立UDP socket然后用这个socket向服务器的(IP-1,Port-1)发送数据包要求服务器用IP-1和一个不同于Port-1的端口发送一个UDP数据包响应客户端, 客户端发送请求后立即开始接受数据包,要设定socket Timeout(300ms),防止无限堵塞. 重复这个过程若干次。如果每次都超时,无法接受到服务器的回应,则说明客户端是一个Port Restricted Cone NAT,如果能够收到服务器的响应则说明客户端是一个Restricted Cone NAT。

    2、用于NAT穿越的STUN协议

    2.1、STUN协议介绍

           STUN(Simple Traversal of User Datagram Protocol Through Network Address Translators),即简单UDP穿透NAT协议,是个轻量级的协议,是基于UDP的完整的穿透NAT的解决方案。

           它允许应用程序发现它们与公共互联网之间存在的NAT和防火墙及其他类型。它也可以让应用程序确定NAT分配给它们的公网IP地址和端口号。STUN是一种Client/Server的协议,也是一种Request/Response的协议,默认端口号是3478。STUN具体内容可以参考RFC3489、RFC5389。

    2.2、STUN协议的实现过程

           STUN协议的部署图如上,STUN协议实现穿越的流程如下: 

    • 1)Client A和Client B分别向STUN服务器发出请求,询问并注册自身的转换后地址。
    • 2)STUN Server收到请求消息,产生响应消息,响应消息中携带请求消息的源端口,即Client A(B)在NAT上对应的外部端口,然后响应消息通过NAT发送给Client A(B)。
    • 3)Client A将其在NAT上对应的外部地址和端口信息包含在消息中,发送给STUN Server请求要和Client B通讯。
    • 4)STUN Server收到请求信息后,向A和B发送对方的NAT映射地址。
    • 5)Client B接收到A的外部地址后,将A的外部地址作为目的地址发送Hole Punching UDP数据报,该数据报使得B端网络的NAT设备允许后续的以A端地址为源地址的UDP数据报进入其内部网络。
    • 6)Client A接收到B的外部地址后,以B的外部地址为目的发送探测UDP数据报,同样该数据报也在A端网络的NAT设备上建立对应映射。
    • 7)Client B收到Client A的探测数据报后,向A端发送确认数据报。至此,双方建立互通的UDP连接。

    3、用于NAT穿越的TURN协议

    3.1、TURN协议介绍

           TURN,在RFC5766中定义,英文全称Traversal Using Relays around NAT(TURN):Relay Extensions to Session Traversal Utilities for NAT(STUN),即使用中继穿透NAT:STUN的中继扩展。简单的说,TURN与STUN的共同点都是通过修改应用层中的私网地址达到NAT穿透的效果,异同点是TURN是通过两方通讯的“中间人”方式实现穿透。

           TURN方式解决NAT问题的思路与STUN相似,也是基于私网接入用户通过某种机制预先得到其私有地址对应在公网的地址(STUN方式得到的地址为出口NAT上的地址,TURN方式得到地址为TURN Server上的地址),然后在报文负载中所描述的地址信息直接填写该公网地址的方式,实际应用原理也是一样的。具体协议内容可以参考RFC5766。

    3.2、TURN协议的实现过程

           如上图所示,假设Client A在私网,TURN server在公网,Peer A在另外一个私网,下面大概讲述一下Client A与Peer A的通信过程:

    • 1)Client A向TURN server发送Allocate request,server收到请求后,如果校验不通过,则返回401错误,如果通过,则创建一个ALLOCATION,并给Client A返回其在NAT上的地址,以及TURN server分发地址。
    • 2)Client A向TURN server发送CreatePermission请求,请求创建一个与Peer A通信的许可。TURN server收到请求后创建这个许可,并且告知client A创建成功。
    • 3)Client A向TURN server通过Send Indication命令发送数据。
    • 4)Server收到之后解析数据,然后把数据转发给Peer A。Peer A可以向TURN server回复其数据,TURN server收到回复之后转发给Client A。

    4、ICE穿越技术

    4.1、ICE介绍

           ICE的全称Interactive Connectivity Establishment(互动式连接建立),由IETF的MMUSIC工作组开发出来的,它所提供的是一种框架,使各种NAT穿透技术可以实现统一。ICE跟STUN和TURN不一样,ICE不是一种协议,而是一个框架(Framework),它整合了STUN和TURN。可参考RFC5245。

    4.2、ICE实现过程

           如上图所示,假设通信双方同时处于对称式NAT内部,现在SIP终端A要与B进行VoIP通信。A所在的内部地址是10.0.1.9,外部地址是211.35.29.30;B的内部地址是192.168.1.6,外部地址是202.205.80.130;STUN/TURN服务器的地址是218.65.228.110。

           第1步:收集候选的传输地址。首先A发起对话请求,进行地址收集。这些地址包括:

    1)直接依附于网络接口的地址(本地传输地址);
    2)服务器反向候选地址(NAT映射公网地址);
    3)中继地址(TURN服务器中继地址)。

    A的地址搜集过程:

           第2步:启动STUN。会话发起者获得一组传输地址后,将在本地传输地址启动STUN服务器,这意味着发送到来源地址的STUN服务将是可达的。

           第3步:确定传输地址的优先级。本地传输地址>NAT映射公网地址>TURN服务器中继地址。

           第4步:构建初始化信息(Initiate Message)。A地址收集后,生成初始化信息。初始化消息由一系列媒体流组成,每个媒体流都有一个缺省地址和候选地址列表。缺省地址通常被Initiate消息映射到SIP信令消息传递地址上,而候选地址列表用于提供一些额外的地址。

           对于每个媒体流来说,任意Peer之间实现最大连通可能性的传输地址是由公网上转发服务器(如TURN)提供的地址,通常这也是优先级最低的传输地址。客户端将可用的传输地址编成一个候选地址列表(包括一个缺省地址),并且为每个候选元素分配一个会话中唯一的标识符。该标识符以及上述的优先级都被编码在候选元素的id属性中。一旦初始化信息生成后即可被发送。初始化消息如下:

    v=0
    o=Dodo 2890844730 2890844731 IN IP4 host.example.com
    s=
    c=IN IP4 218.65.228.110
    t=0 0
    m=audio 8076 RTP/AVP 0
    a=alt:1 1.0 : user 9kksj== 10.0.1.9 1010
    a=alt:2 0.8 : user1 9kksk== 211.35.29.30 9988
    a=alt:3 0.4 : user2 9kksl== 218.65.228.110 8076

           第5步:响应处理。包括地址收集和连通性检查。B收到初始化信息Initiate Message后,先做同样的地址收集过程,B地址收集过程如下:

    然后进行连通性检测。

           第6步:连通性检测。连通性检查的基本原则是:

    1)按照优先顺序对候选传输地址进行排序;
    2)利用每一个候选地址对发送一个检查包;
    3)从接收方收到肯定的应答检查。

           B的连通性检测:

    完成连通性检测后,B产生应答消息,其中包括B的三个候选地址(前三条)和B—>A可联通的地址(第四条,称之为到B的peer-derived地址),如下:

    v=0
    o= Vincent 2890844730 289084871 IN IP4 host2.example.com
    s=
    c=IN IP4 218.65.228.110
    t=0 0
    m=audio 8078 RTP/AVP 0
    a=alt:4 1.0 : peer as88jl 192.168.1.6 23766
    a=alt:5 0.8 : peer1 as88kl 202.205.80.130 10892
    a=alt:6 0.4 : peer2 as88ll 218.65.228.110 8078
    a=alt:7 0.4 3 peer3 as88ml 218.65.228.110 5556

           A收到应答消息后开始类似B的连通性检测。A的连通性检测:

    同B的连通性检测类似,对于B的私有地址和STUN映射公网地址的连通性检查结果都失败,而B的TURN中继地址和到B的peer-derived地址成功(本例中它们都具有相同的优先级0.4)成功。相同优先级下我们通常采用peer-derived地址,所以A发送到B的媒体流将使用218.65.228.110:5556地址,而B到A的媒体流将发送至218.65.228.110:8076地址。

           第7步:优化的连通性检测方案。从步骤5开始,B收到初始化信息Initiate Message后,先做同样的地址收集过程,然后把地址作为应答消息发送给A。这样A就有了B的地址,B也有了A的地址。A收到B的应答之后,开始连通性检测。步骤同上图,不一样的是,在第7条消息之后,B收到A的检测消息,先做消息8的应答,然后用被检测的地址(192.168.1.6:23766)向对端(218.65.228.110:5566)发送检测请求,如果同样能够得到应答,则说明这对地址是有效的,可用于媒体传输。这个过程也称之为四次握手:当通过地址对中的本地地址向地址对中远程地址发送一个STUN请求,并成功收到STUN响应,称该地址对是可接收的;当地址对中的本地地址收到地址对中远程地址的一个STUN请求,并成功地响应,则称该地址对为可发送的。若一个地址对是可接收的,同时又是可发送的,则称该地址对是有效的,即通过连通性检查。

    展开全文
  • 目的,模拟一个内网和外网,内网机器访问外网,并进行 地址转换。 采用Linux主机做网关,在其上配置两个网段、iptables的转发规则,并作为内网 DHCP 服务器。

    本次纯属记录,希望有所帮助。
    目的,模拟一个内网和外网,内网机器访问外网,并进行 地址转换。
    实验环境:
    已有一个 192.16.10.0/24 网段的局域网,该网络内拥有一台路由器,用于给网络中的设备分配IP地址。实验时,把该局域网当成外网。以下都以外网称呼。
    欲配置一个 192.168.1.0/24 的网段作为内网。
    有一台拥有两网卡的Linux主机,将该Linux主机做成网关,其分别连接两个网段,完成两网段间的网络地址的转换工作。以下以网关称呼。
    以下操作均在root用户下进行。

    1. 网卡配置和NAT转发

    第一步:配置 网关

    网关配置:系统 Ubuntu 18.04,内核版本 5.0.0,网卡1名称:enp1s0,网卡2名称:enx00e04c68066f
    (网卡2是一个USB转网卡,可使用ls /proc/sys/net/ipv4/confifconfig查看网卡名称)

    欲把该网关的 网卡 enp1s0 连接外网网段 192.16.10.0/24。网卡 enx00e04c68066f 连接 内网网段 192.168.1.0/24。
    其 interface 文件配置如下:
    vim /etc/network/interface

    # enp1s0 采用 DHCP,等待分配 ip
    auto enp1s0 
    iface enp1s0 inet dhcp
    
    # enx00e04c68066f 采用 静态 ip,其 ip 是 192.168.1.2
    auto enx00e04c68066f 
    iface enx00e04c68066f inet static
    address 192.168.1.2
    netmask 255.255.255.0
    # gateway 192.168.1.2 # 网关
    # dns-nameservers 114.114.114.144 # DNS
    # dns-nameservers 8.8.8.8
    
    # 本地回环地址,默认这样配置即可
    auto lo
    iface lo inet loopback
    

    说明,enp1s0 连接了外网,采用dhcp获得地址(由上述所说的路由器分配地址)。enx00e04c68066f 连接内网,采用了静态网络配置,把ip地址设定为 192.168.1.2。
    然后使用/etc/init.d/networking restart重启网络。为避免不必要的问题,建议重启系统。
    可使用ifconfig查看是否网络配置是否生效了。
    本人实验时,enp1s0 分配到ip地址为192.16.10.8.
    在这里插入图片描述

    第二步,网关 开启内核转发

    在网关上,要配置内核转发。
    此为永久生效方案,即重启后仍有效
    vim /etc/sysctl.conf
    大约在文件的第28行,将以下内容的注释去掉(或者新增一个)

    net.ipv4.ip_forward=1
    

    使内核转发立即生效:
    sysctl -p

    第三步:配置内网中机器

    将一台Linux主机PC1的网卡eth1连接到 enx00e04c68066f 网卡。将其作为内网机器。
    为其配置静态ip地址192.16.10.5。
    ifconfig eth1 192.16.10.5
    或者,像上面一样,通过修改 interface 文件实现静态网络配置。

    配置后,一定用使用 ping 等命令测试 PC1 与 网关的内网 ip 是否连通。如ping 192.168.1.2,两台机子上都要ping对方机器。

    然后加一条路由,告诉内网机器,发送给 192.16.10.0/24 的数据包,交给网关 192.168.1.2 处理。(确保能ping通之后,再加此路由)
    route add -net 192.16.10.0/24 gw 192.168.1.2

    route add -net 0.0.0.0 gw 192.168.1.2
    注:重启网络或系统之后路由需重配。
    或者在 interface 里面,加上默认网关(gateway字段),指向 网关的内网 ip 地址。

    注:使用route -n可查看当前的路由配置。使用route del -net 192.16.10.0/24 gw 192.168.1.2可删除上述配置的路由。

    如果是Windows系统,在“控制面板” -> “网络和Internet” -> “网络和共享中心” -> 左边“更改适配器设置” -> 双击要配置的指定网卡->弹出的界面上,选择“属性” -> 在“此连接使用下列项目’中,找到并双击“Internet 协议版本4(TCP/IPv4)” -> 选中 “使用下面的IP地址”,并填写相关参数(DNS服务器参数也可提供) -> 确定后关闭即可。

    第四步,配置 网关的 NAT 转发规则

    转发时,内网发出的数据包,其目的地址是 外网机器的ip,源地址是内网ip,应由 网关 将内网的 ip 地址 转换成 网关的 外网 ip,然后,再发送出去,故为源地址转换,SNAT。

    而外网返回回来的数据包,其源地址是外网机器的ip,目的地址是网关的外网 ip,应由 网关将 此 外网的 ip 地址,转成内网的 ip 地址,然后发送给内网中对应的机器,故为目的地址转换,DNAT。

    简要解释,如果数据包源地址是内网 ip ,外网机器 并不能识别这个 内网 ip 在哪里,因此没法返回消息,但 外网机器,可以识别该 网关的外网 ip,因而可以发送给网关,再由网关交给内网中实际的机器。因此 发出去之前,将 源 ip 改成 网关的外网 ip,返回时,要将 目的 ip 变为 内网实际机器的 ip。

    在网关上配置如下的 NAT 规则

    iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o enp1s0 -j MASQUERADE
    

    其指示,来自 192.168.1.0/24 (也可以不指定),并由 enp1s0 发出去 的数据包,应进行 NAT 转换。该 MASQUERADE 会自动进行 SNAT (似乎也会将返回数据包自动DNAT到内网机器上),有关于这个关键字的更多内容,可搜索“iptables -j MASQUERADE”了解。

    配置完之后,应在内网 机器 PC1 上,ping 192.16.10.2 查看是否能通信,以及,ping 外网其他 ip 地址查看是否能通信。例如,外网路由器的 ip 地址是 192.16.10.254,需ping 192.16.10.254。可在网关或外网机器上,使用wireshark等软件,抓包查看 发出来数据包的源ip地址 和 返回的数据包的目的ip地址,是否是那台网关的 外网ip地址。
    注:
    可使用 iptables -t nat -nL查看配置的规则。
    使用iptables -t nat -F 可清空规则。
    或使用下面的,指定删除上述规则。

    iptables -t nat -D POSTROUTING -s 192.168.1.0/24 -o enp1s0 -j MASQUERADE
    

    注:此规则,重启电脑后会失效,需重配。也可采用如iptables-save等命令自动重配,此处请自行搜索。

    到了这里,配置就完了,内网机器要使用浏览器上网的话,最好再在其上配置dns地址。

    2. 网关 配置 DHCP 服务器(可选)

    上述第三步,内网是采用了静态 ip 的形式进行了配置。也可以在 网关上 配置一个 DHCP 服务器,让其给内网中的机器,分配内网地址和网关地址,以及dns地址。
    此处使用 isc-dhcp-server 进行DHCP分配。
    以下操作在 网关 机器上进行。

    下载 DHCP 服务器 软件

    apt-get install isc-dhcp-server
    

    配置 DHCP 服务器 设置

    配置第一个文件
    vim /etc/default/isc-dhcp-server
    配置如下,应配置 网关 的 内网网卡作为 DHCP 服务器监听的网卡。
    有的版本可能没有v4和v6的区别,只有INTERFACES一条。

    INTERFACESv4="enx00e04c68066f"
    # 显然上面是指ipv4,这个是指ipv6
    INTERFACESv6="" 
    

    配置第二个文件
    vim /etc/dhcp/dhcpd.conf
    这个是配置ipv4的dhcp用的。如果需要配置ipv6的,同目录下,有个dhcpd6.conf是配置ipv6的dhcp用的。
    注:建议配置前备份这两个文件,本人删除后,重装软件等啥操作都试了,还是没有生成这两个文件,不得已在其他虚拟机上安装这个软件,拷贝了这两个文件过来。
    该文件配置如下:

    # option definitions common to all supported networks...
    option domain-name "example.org"; # 可以不改,不知道有什么用
    #option domain-name-servers ns1.example.org, ns2.example.org;
    option domain-name-servers 202.112.14.21,202.112.14.11; # 这个是DNS,也可填写如114.114.114.114,一般填两个
    
    # 下面两个是使用了默认值,应该和 DHCP 地址租期有关系
    default-lease-time 600; # 
    max-lease-time 7200;
    
    # The ddns-updates-style parameter controls whether or not the server will
    # attempt to do a DNS update when a lease is confirmed. We default to the
    # behavior of the version 2 packages ('none', since DHCP v2 didn't
    # have support for DDNS.) 
    ddns-update-style none; # 这个不知道干啥,默认吧
    
    # 下面这个就是个人 DHCP 网段配置了,可参照文件里面的示例写
    # 网段和掩码
    subnet 192.168.1.0 netmask 255.255.255.0 { 
    
    	# DHCP 分配的地址范围
    	range 192.168.1.2 192.168.1.100; 
    	
    	# 内网 网关的 ip 地址
    	option routers 192.168.1.2;  
    	
    	# 广播地址
    	option broadcast-address 192.168.1.255; 
    }
    

    请注意上面的字母还有分号啥的不要写错了。

    网关 网卡配置

    网关 的 内网网卡 enx00e04c68066f, 一般配置成上述 内网 网关 ip,即 192.168.1.2,采用静态配置。这部分的 interface 和上面是一样的。配置完后,建议/etc/init.d/networking restart重启网络。

    启动 DHCP 服务器

    使用 server isc-dhcp-server restart 重启 DHCP 服务器。如果出错,这里并不会报错。
    使用server isc-dhcp-server status 可以看到状态,如果成功启动,则应看到如下 active(running)等字眼。如下所示:
    在这里插入图片描述
    如果出错,这里会提供一点点报错信息,请仔细检查 上述两个配置中,是否错误输入了什么东西,例如单词拼写错误,空格输入成逗号,没有输入分号,网段输入错误,等等。(本人在这里,因为拼写错误,检查了良久)

    如果成功启动 输入netstat -aunp | grep dhcpd,应看到(单个或多个) dhcpd,如果失败了,则没有结果。或者是ps -ajx | grep dhcpd(至少会显示 grep 这条,但这个显然不是dhcpd的进程)。

    可使用 ifconfig 随时查看网卡状态。

    提醒,网关上记得加 iptables 的 NAT 规则。

    内网 主机网络配置

    这些操作在 内网中Linux机器 PC1 上进行
    需将 interface 文件中网卡 eth1 改成 DHCP 获取。
    vim /etc/network/interface

    # eth1 采用 DHCP,等待分配 ip
    auto eth1 
    iface eth1 inet dhcp
    
    # 本地回环地址,默认这样配置即可
    auto lo
    iface lo inet loopback
    

    然后,/etc/init.d/networking restart重启网络,或者重启电脑。
    因为 DHCP 服务器填有 网关地址,故这里可以不用配置路由。

    使用 ifconfig 查看是否分配到了ip地址。

    如果是Windows系统,在“控制面板” -> “网络和Internet” -> “网络和共享中心” -> 左边“更改适配器设置” -> 双击要配置的指定网卡->弹出的界面上,选择“属性” -> 在“此连接使用下列项目’中,找到并双击“Internet 协议版本4(TCP/IPv4)” -> 请选中 “自动获得IP地址” -> 确定后关闭即可。

    如果 ip 地址获取失败,建议重启网卡或电脑试试。

    关闭 DHCP服务器

    如果不需要了DHCP服务器,除了卸载软件,或者杀死相关进程,也可使用

    systemctl disable isc-dhcp-server
    systemctl stop isc-dhcp-server
    

    停掉 DHCP 服务。这时候,使用systemctl status isc-dhcp-serverservice isc-dhcp-server status看到将显示inactive(dead)(可能需要按Q键退出该模式回到终端)。这样开机之后,也不会启动该服务。

    显然,重新启用该服务的命令如下,启动后,一定要用service isc-dhcp-server status等命令查看是否启动成功。

    systemctl enable isc-dhcp-server
    systemctl restart isc-dhcp-server # 或者 service isc-dhcp-server restart
    

    3. 访问 内网(可选)

    在搭建好 内网 网关 之后,内网 中 主机,可以访问外网中主机,例如 在 192.168.1.5 的主机上,可以 ping 通 192.16.10.71 的主机。但反过来ping并不行。

    内网访问外网原理简述。
    内网中主机 192.168.1.5 ,虽然可能不知道192.16.10.254的主机在哪里,但根据路由表或默认网关,会自动发送给 内网的网关 192.168.1.2,这个网关 由于 同时连接了 内网(192.168.1.2)和外网(192.16.10.8),其根据自己的路由表或默认网关,就会发送到外网中相应的主机上,这个时候,因为做了NAT设置,因而数据包的源地址192.168.1.5,被修改成192.16.10.8,等返回时,返回包的目的地址是192.16.10.8,然后网关再自动NAT,将目的地址改成192.168.1.5,然后 内网中主机就收到返回包,就表现为ping通了。

    而外网不能访问内网,是因为 外网 主机(比如 192.16.10.71)不知道 内网主机(192.168.1.5)在哪里,然后它发给自己的默认网关,比如外网的路由器(192.16.10.254),但是这个路由器也不知道内网主机在哪里,因此就没办法通信。

    所以,想要从 外网的主机 访问到 内网的主机,一个比较简单的方法原理,就是指定 发往 192.168.1.5 的包,发给 那个同时连接了两个网段的网关即可。
    因为,在需要访问内网的那个外网主机(192.16.10.71)上或者是外网网段的路由器上,添加一条路由即可。例如:

    route add -net 192.168.1.0/24 gw 192.16.10.8 # linux 下写法
    # route add 192.168.1.0/24 192.16.10.8 # windows 下写法,需管理员权限运行 cmd
    

    其指示,发往 192.168.1.0/24 的数据包,发给 192.16.10.8 处理。
    注:因为这个内网网段是ip协议里的私有网段,如果是公有网段,那可能影响 主机上网。
    另注:抓包发现这个数据包里的ip地址并没有被NAT,不太懂(例如,我在192.16.10.71的主机上,ping 192.168.1.5时,返回的数据包并没有被 NAT)。
    这样,在 外网主机上,访问 内网主机时,直接填写内网主机的IP地址即可。
    注:此方法,重启后会失效。

    也有其他方式的访问内网实现,例如端口代理之类的。

    4. 参考链接

    ubuntu16.04配置网卡
    Linux网络的SNAT和DNAT
    IPtables中SNAT、DNAT和MASQUERADE的含义
    ubuntu16.04上安装配置DHCP服务的详细过程

    展开全文
  • 简单理解 NAT

    千次阅读 2019-12-15 00:31:23
    文章目录简单理解 NAT1. 简介2. 静态NAT(Static NAT)3. 动态NAT(Pooled NAT)4. 网络地址端口转换NAPT(Port-Level NAT)5. 一些问题 简单理解 NAT 写这篇文章仅供自己参考 =W= 1. 简介 NAT...

    简单理解 NAT

    写这篇文章仅供自己参考 =W=

    1. 简介

    • NAT(NetworkAddressTranslation),即网络地址转换。利用网关,将不能访问外部网络的IP地址转换为可访问外部的IP地址,从而实现内部网络到外部网络的访问。
    • 分类
      • 静态NAT(Static NAT)
      • 动态NAT(Pooled NAT)
      • 网络地址端口转换NAPT(Port-Level NAT)-> 最常用
    • 主要功能
      • 数据包伪装、平衡负载、端口转发、透明代理
    • 例子
      • 平时运营商为大家安装的宽带(一般情况下,大家拥有的都是内网IP,统一由一个拥有公网IP的NAT网关进行转换,保证大家在Internet的访问)
      • 虚拟机的NAT转换

    2. 静态NAT(Static NAT)

    • 特征
      • 一个内网IP对一个外网IP,不会改变
      • 外网可直接访问内网
    • 示意图
      静态NAT示意图
    • 解释(举栗子)
      • 服务器A发出访问服务器X的请求(src=192.168.0.101, dst=14.215.177.39),由于在内网,请求先被发到网关处(192.168.0.1)
      • NAT网关接收到请求,根据所设置的IP映射表,转换请求(src=14.215.177.21, dst=14.215.177.39),将请求通过网络发送至服务器X
      • 服务器X收到请求,进行响应(src=14.215.177.39, dst=14.215.177.21),请求会先走到NAT网关处
      • NAT网关接收到请求,根据所设置的IP映射表,转换请求(src=14.215.177.39, dst=192.168.0.101)
      • 服务器A顺利收到服务器x的响应

    3. 动态NAT(Pooled NAT)

    • 特征
      • 一个内网IP对一个随机外网IP,因为存在外网IP池
      • 外网难以直接访问内网
    • 示意图
      动态NAT示意图
    • 解释
      • 由于拥有的外网IP较少,每台内网服务器不能都分到外网IP。这个时候大家需要共享IP,使用时从IP池中分配,不用了就释放。
      • 传输方式和静态相似,需要注意一下几点:
        • 在NAT网关处分配IP后,NAT网关会做IP映射记录,用于将外部服务器的响应发送到正确的内网IP服务器
        • 在NAT网关处分配IP后,一定时间内不使用,将会抹去映射记录,该IP进入空闲状态,可以被分配给其他内网服务器
        • 由于内网访问外网的IP是动态的,所以外网向内网发送请求时难以成功

    4. 网络地址端口转换NAPT(Port-Level NAT)

    • 特征
      • 多个内网IP对一个外网IP的不同端口
      • 外网难以直接访问内网
    • 示意图
      网络地址端口转换NAPT示意图
    • 解释
      • NAT网关只需一个外网IP即可完成外网访问转换,极大地降低了外网IP的使用量
      • NAPT传输方式依旧和前面的相似,只有一个外网IP的情况下,将映射关系改为了“内网IP -> 随机端口”,用端口来区分内网IP,保证正确的解析外网服务器的响应
      • NAPT内部还有几个分类:全锥NAT、限制性锥NAT、端口限制性锥NAT、对称NAT等

    5. 一些问题

    • 平时运营商给个人用户设置网络,采用的是什么方式?
      • 采用NAPT,这样节约公网IP
    • 如果使用的是网络地址端口转换NAPT,外网真的没法向内网发起请求吗?
      • 可以,通常有2种方式:
        • 服务器中转:
          • 在公网准备一台服务器S,内网服务器A与服务器S保持心跳连接。
          • 外网服务器B若想要访问内网服务器A,需向服务器S发起请求,服务器S再向内网服务器A获取资源,返回给外网服务器B。
          • 所有的数据传输都需要经过服务器S,性能较低。内网穿透方式不行时,可以这样干。
        • 内网穿透:
          • 在公网准备一台服务器S,服务器A与服务器S保持心跳连接,S获得服务器A的IP、Port。
          • B服务器向服务器S发送消息,表明它想访问服务器A。S获得服务器B的IP、Port,同时向A发送B的IP、Port,向B发送A的IP、Port。
          • 服务器A通过从服务器S处获得的B的IP、Port向服务器B发送消息。显然因为服务器B的NAT网关没有相关映射记录,服务器B收不到该消息。但是因为服务器A发送了这样一条消息,服务器A的NAT网关会记录下 A -> B的映射。
          • 同时服务器B也会向A发送消息,此时服务器B的NAT网关会记录下 B -> A的映射
          • 至此,服务器A与服务器B的网络通了
          • 成功率:
            • 静态端口映射的NAT成功率较高
            • 动态端口映射的NAT成功率较低
    • 描述一下NAT的功能?
      • 数据伪装:内网IP地址通过NAT被转换为外网IP,外网服务器只知道数据是NAT转换后的外网IP地址传过来的,这样内网服务器不用暴露在外网。
      • 平衡负载:NAT网关将内网多台服务器IP映射到一个外网IP,当外网服务器直接请求外网IP时,NAT网关会对内网的服务器进行轮询,再响应外网服务器,这样就实现了负载均衡。但是NAT无法感知内网服务器故障,即便内网服务器出了问题,依然会转发请求。
      • 端口转发:为内网某个服务器配置端口映射,例如 9000端口 -> 内网服务器A(192.168.0.100),即可将访问NAT网关该9000端口的请求转向内网服务器A。
      • 透明代理:内网服务器只需要设置默认网关为该NAT网关即可,NAT网关再去代理与外网连接,内网完全感受不到代理的存在。

    6. 其他

    • Linux监控HTTP/TCP连接(三次握手/四次挥手)
      • 安装:yum install tcpdump
      • 开启监控:tcpdump -nn -i eth0 arp or port 80 (即监控网卡eth0的arp协议或80端口)
      • 发送请求:
        • curl www.baidu.com 80
        • 或 arp -d 192.168.0.1 && nc www.baidu.com 80
    • Windows监控HTTP/TCP连接(三次握手/四次挥手)
      • windows平台需要安装windump
      • 开启监控
        • 列出本机网卡:WinDump.exe -D
        • 监控某个网卡关于www.baidu.com的连接:WinDump.exe -nn -i “\Device\NPF_{34D20894-77D0-40ED-ACE2-B658D462584B}” host “www.baidu.com” and “tcp”
      • 发送请求
        • curl www.baidu.com
    展开全文
  • 我是在内网测试,首先在自己电脑上安装VMware Workstation,安装过程比较简单,不再贴图了。 下面开始安装esxi 下一步直到完成。然后选择要安装的esxi镜像 然后打开电源自动开始安装 选择Enter 选择F11 选择Enter ...
  • 详解什么是NAT

    万次阅读 多人点赞 2020-12-28 09:02:28
    NAT(Network Address Translator,网络地址转换)是用于在本地网络中使用私有地址,在连接互联网时转而使用全局 IP 地址的技术。NAT实际上是为解决IPv4地址短缺而开
  • NAT穿透的工作原理

    千次阅读 2022-04-23 21:23:56
    一、引言 1.1 背景:IPv4地址短缺,引入NAT 全球IPv4地址早已不够用,因此人们发明了... 应答流量(入向):到达NAT设备后进行相反的转换,然后再转发给客户端。 整个过程对双方透明。 更多关于NAT的内容,可参考(译
  • 如何优化 NAT 性能?

    千次阅读 2021-03-25 08:20:47
    网络延迟是核心的网络性能指标。由于网络传输、网络包处理等各种因素的影响,网络延迟不可避免。但过大的网络延迟,会直接影响用户的体验。 NAT原理 NAT 技术可以重写 IP 数据包的源 IP 或者目的 IP,被普遍地用来...
  • 两者都要求你删除第二个NAT步骤(它会破坏你正在寻找的信息).这样做之后的选择是:1)使服务器A成为服务器B的下一跳,用于所讨论的流量,这就是为什么它适用于您提到的路由器.这可以通过使服务器A成为服务器B的默认路由,...
  • NAT(地址转换技术)详解

    万次阅读 多人点赞 2018-03-17 16:31:35
    NAT产生背景 ip地址基础知识 NAT技术的工作原理和特点 静态NAT 动态NAT NAT重载(经常应用到实际中) NAT技术的优缺点 优点 缺点 NAT穿越技术 应用层网关(ALG) ALG的实际应用 NAT技术的未来 参考文献 ...
  • 华为防火墙配置(防火墙NAT

    千次阅读 多人点赞 2021-12-05 15:01:08
    一、防火墙NAT概述 1、防火墙NAT策略介绍 2、NAT策略分类 (1)NAT No-PAT (2)NAPT (3)Easy-IP (4)Smart NAT (5)三元组NAT 3、NAT策略组成 4、NAT策略匹配规则 5、NAT策略处理流程 6、源NAT的...
  • 家庭网络之NAT

    千次阅读 2021-08-06 21:13:24
    我们会不定期挑选 Matrix 优质的文章,展示来自用户的真实的体验和观点。 文章代表作者个人观点,少数派仅对标题和排版略作修改。 在使用网络的过程中,或许你会遇到这样的问题: Nintendo Switch 等游戏主机...
  • NAT 技术简单配置

    千次阅读 2020-08-06 19:19:52
    NAT产生的背景 由于IPv4地址不够用,IPv6没有广泛应用起来。 NAT的定义 NAT:网络地址转换技术(Network Address Translation) 网络地址转换,就是替换IP报文头部的地址信息。NAT通常部署在一个组织的网络出口位置...
  • NAT的基本原理并不复杂,但是在...由于NAT是IP转发流程中的一个环节,具体的实现势必和软硬件密切相关。为了尽可能提高设备转发和报文处理的性能,软件数据结构和处理流程会应根据设备硬件的特点进行设计。本节我们...
  •  当今互联网到处存在着一些中间件(MIddleBoxes),如NAT和防火墙,导致两个(不在同一内网)中的客户端无法直接通信。这些问题即便是到了IPV6时代也会存在,因为即使不需要NAT,但还有其他中间件如防火墙阻挡了链接的...
  • NAT简介NAT:Network Address Translation,网络地址转换NAT技术的工作原理和特点NAT名字很准确,网络地址转换,就是替换IP报文头部的地址信息。NAT通常部署在一个组织的网络出口位置,通过将内部网络IP地址替换为...
  • 网络技术:NAT 网络地址转换及原理

    千次阅读 2021-09-03 16:03:24
    NAT 网络地址转换(NAT)技术的理论部分可以看博客——网络层——NATNAT 的功能大致为:在局域网中组织会为内部主机分配私有地址,当内部主机发送数据包到外部网络时私有地址就会自动转换为公有 IP 地址,公有 IP ...
  • NAT概述

    2020-03-30 18:56:53
    原文链接:...1IPv4协议和NAT的由来 今天,无数快乐的互联网用户在尽情享受Internet带来的乐趣。他们浏览新闻,搜索资料,下载软件,广交新朋,分享信息,甚至于足...
  • 穿透NAT类型以及STUN、TURN简单介绍概述NAT的副作用以及解决方案NAT有4种不同的类型锥形和对称形NAT的区别STUN和TURN的简单介绍STUN Server主要做了两件事:TURN Server也主要做了两件事:三种转发情形 概述 NAT英文...
  • NAT详解

    千次阅读 2022-01-24 21:07:07
    介绍了防火墙,NAT的相关概念
  • NAT简介

    千次阅读 2019-09-03 16:28:37
    NAT详解:基本原理、穿越技术(P2P打洞)、端口老化等 这是一篇介绍NAT技术要点的精华文章,来自华3通信官方资料库,文中对NAT技术原理的介绍很全面也很权威,对网络应用的应用层开发人员而言有很高的参考价值。 1. ...
  • 什么是NAT技术? NAT(Network Address Translation,网络地址转换)是将IP数据报文中的IP地址转换为另一个IP地址的过程。当内部IP想要访问外网时,NAT主要实现内部网络和外部网络之间IP的转换,这种通过使用少量的...
  • 互联网上有很多关于NAT回流故障的分析,但大多数是模棱两可,没有从根本上给出NAT回流故障的具体原因,本文通过数据包捕获、分析数据包,结合TCP三次握手原理,详细的分析了NAT回流故障的具体原因,并给出相应的...
  • nat穿透浅析

    万次阅读 多人点赞 2018-06-26 17:46:26
    原文转自:点击打开链接导语最近介入测试P2P的相关逻辑,因此对NAT穿透原理做了一定程度的了解(当然也没有很深入)。本篇文章也是综合和参考了些网络上和文献里的一些资料(文中没有对引用处进行标记,请见谅)。写...
  • NAT详解(网络地址转换)

    千次阅读 2021-12-23 15:23:59
    目录一句话说清楚它是干什么的:概念:实现方式:NAPT...当在专用网内部的一些主机本来已经分配到了本地IP地址(即仅在本专用网内使用的专用地址),但又想和因特网上的主机通信(并不需要加密)时,可使用NAT方法。
  • iptables nat及端口映射 【转】

    千次阅读 2017-11-03 16:57:17
    文章来源:iptables nat及端口映射 iptables 应用初探(nat+三层访问控制)     iptables是一个Linux下优秀的nat+防火墙工具,我使用该工具以较低配置的传统pc配置了一个灵活强劲的防火墙+nat系统...
  • 一、NAT与TCP NAT会话的建立与删除案例: NAT在TCP连接中的交互过程: 以图中的家庭网络为例,考察一个由地址为10.0.0.126的无线客户端发起的TCP连接,其目标是Web服务器主机www.isoc.org(IPv4地址212.110....
  • 第十七:动态路由RIP与NAT,这样配置也太简单了 提示:这里系列文章的目录 链接: 第十六:单臂路由与三层交换机的碰撞. 文章目录第十七:动态路由RIP与NAT,这样配置也太简单了前言一、动态路由是什么?二、使用...
  • 1、首先,要配置网络环境,总共使用两台虚拟路由器。当数据从一个子网传输到另一个子网时,可通过路由器的路由功能来完成。...将来,将在它们上配置NAT功能。左侧的路由器连接到两个服务器,即绑定服务器和Apac...
  • NAT简介 在私网与外网通信的过程中, 私网与公网连接的边沿节点被称为路由器。 比如私网内部网络为 192.168.1.0 的网络。 路由器的公网 IP 为 112.93.114.32, 服务器的公网 IP 地址为120.93.24.180。 服务器发送...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 26,522
精华内容 10,608
热门标签
关键字:

最简单的nat 转发