Linux NAT网络连接权威指南及基本流程与实现技巧

Linux NAT网络连接权威指南

【1】准备工作,写在前面

1.1)检查服务(cmd>>services.msc,我用的是VM)

附:Netfilter与ip_conntrack

Netfilter

Linux的协议栈仅仅实现了基本的协议操作,对应TCP/IP标准,Linux的协议栈仅仅实现了一个最小集。其余的所有扩展几乎(并非所有!还有一部分由net
schedule实现)均由Netfilter来实现,包括:IP Firewall,IP NAT,IPSec,IPVS等。

ip_conntrack

ip_conntrack是NAT实现的重中之重,Linux的NAT完全依赖ip_conntrack,依附于ip_conntrack之上。

基本数据结构:

值得注意的是,两个方向的五元组节点在confirm之后统一处在一个哈希表中,并不区别对待,只要使用一个五元组作为键查找到不管哪个方向的五元组节点,都可以找到ip_conntrack结构体本身。五元组节点除了包含五元组信息之外,还包含方向信息。

NAT流程

NAT如何依附于ip_conntrack之上的呢?如上图所示,NAT修改了ip_conntrack中的反方向的五元组,对正方向的五元组并没有影响,正是这个特点使得在Linux实现NAT的时候可以使用一种非常巧妙的方法。

NAT的流程如下所示:

注意:由于仅仅一个流的第一个包会创建ip_conntrack结构体,因此也是第一个包会去匹配你用ipptables配置的NAT规则,这是个局限性

实现技巧

在2.6的早期内核中,NAT的数据,包括要转换到的IP地址等数据都是保存在CT的extension中的,叫做ip_nat_info,而该
info可以从CT中取出来,在到达nf_nat_fn的时候执行NAT的时候使用里面的ip_nat_info_manip来做NAT的依据。但是在后期的版本中,使用了一种更加高效得方式,需要转换到的IP地址不再保存在ip_nat_info中,而是直接使用上述流程图中的计算方法得到,即获取反向五元组,取逆,按结果执行。这么做是有依据的,因为在NAT规则匹配成功后,会直接修改掉反方向五元组的tuple,因为NAT规则匹配成功肯定是针对正方向五元组的,毕竟只有第一个包才会去匹配NAT规则,无来怎能有回呢?所以根据NAT规则修改的既然是反方向五元组,那么标准取逆后得到就是NAT后的正方向五元组了,在这个过程中,正方向的五元组一直保存不变!对于反方向回来的包,它的反向就是正方向,由于正方向从来没有被改过,取逆后即成为原始的反方向的五元组,返回包的五元组得以还原!正因为如此,Linux
NAT对方向才如此敏感:匹配规则的正方向的数据包,修改的是反方向的五元组!注意正向,正方向以及反向,反方向并不是同一个意思,正向和反向是针对当前的方向来讲的,正方向和反方向是针对数据流的发起方到接收方的方向来讲的。

可以从这个实现看出Linux内核的发展,在2.6的早期版本中,实际上在NAT规则匹配成功后也是去修改反方向五元组,但是那时怎么就不是通过反向五元组取逆来作为地址转换依据的呢?实际上那时一定可以这么做!事实证明,Linux内核中布满的逐步逐步被认识被发现的技巧。这也正体现了网络社区开发的“90%特性”,即甚至90%的可用性即可,不要求100%的完美。

时间: 2025-01-27 18:20:52

Linux NAT网络连接权威指南及基本流程与实现技巧的相关文章

linux无线网络连接的一些问题

问题描述 linux无线网络连接的一些问题 用的是Centos6.7 内核2.6.32 以<鸟哥的linux私房菜>学习为主,不用NetworkManager. 在同一个局域网内,有线连接按照鸟哥说的修改配置文件/etc/sysconfig/network-script/ifcfg-eth0,然后配置/etc/resolv.conf中的DNS服务器ip就可以了: 然而,无线连接却问题多多: 1.首先配置完无线网卡的文件/etc/sysconfig/network-script/ifcfg-wl

详解虚拟机中的NAT网络连接方式

  我就个人对虚拟机的理解,把虚拟机上网最方便的也是最难理解的NAT方式和大家一起聊聊,因为是大话NAT,所以说的会罗嗦点,不过主要是照顾新人.:) 老鸟就赶快飞吧 呵呵 先说一点别的,做为引子 假设现在R老师带3个班的学生,分别为a班. b班. c班 .现在就出现了两个交流方式: 第1种交流方式: 本班内交流,比如说a班的一个同学想和另一个同学交流,就可以直接在班里喊那个同学的名字.这个就向计算机内的同一个网段的计算机的交流方式-广播. 第2种交流方式: 班与班之间的学生交流,这个时候在a班里

Linux服务器网络连接有问题?Ping工具来帮忙

网络可能是任何服务器上最基本的服务了.如果网络发生了故障,那么所有其他的(服务)都会出现故障.管理员可以使用Ping工具来帮助自己让掉线的Linux服务器重新上线. 所有的网络排错工具之母可以说是Ping工具了.你可能从其他操作系统中也对这个工具有所了解了,它可以验证与其他机器之间的连接性.如果你是管理Linux系统的新手,那么我会告诉你一些使用Ping工具的技巧. 在开始使用ping工具之前,先明确你想要Ping的对象.详尽的Ping测试会涉及到使用域名解析服务器的域名(DNS)访问在Inte

VMware运行Ubuntu 三种网络连接方式:bridge、NAT、Host-Only的区别详解

概述: VMWare提供了三种工作模式,它们是bridged(桥接模式).NAT(网络地址转换模式)和host-only(主机模式).要想在网络管理和维护中合理应用它们,你就应该先了解一下这三种工作模式. 1.bridged(桥接模式) 在这种模式下,VMWare虚拟出来的操作系统就像是局域网中的一台独立的主机,它可以访问网内任何一台机器. 在桥接模式下,你需要手工为虚拟系统配置IP地址.子网掩码,而且还要和宿主机器处于同一网段,这样虚拟系统才能和宿主机器进行通信.同时,由于这个虚拟系统是局域网

《数据中心虚拟化技术权威指南》一第2章 数据中心网络演进2.1 以太网协议:过去和现在

第2章 数据中心网络演进 数据中心虚拟化技术权威指南 本章节将讲述以太网协议的发展,设计数据中心以太网络的时候需要考虑的最重要因素,以及虚拟化如何在这些项目实施中克服常见的局限性.本章包含以下几个主题. 以太网协议的过去与现在: 数据中心网络拓扑: 网络虚拟化优势. 数据中心网络的主要目标是将服务器数据传输至客户端和其他服务器.很明显,数据中心是为提供数据服务而建设的,网络可以精确地定义设备的真实效率. 为了与今天数据中心环境的可靠性和成长性相配,数据库中心网络必须包含以下特征. 可用性:能够健

《数据中心虚拟化技术权威指南》一2.3 网络虚拟化的优点

2.3 网络虚拟化的优点 数据中心虚拟化技术权威指南 网络虚拟化技术可以集合两种矛盾设计的优点,从而可以使得它们的缺点最小化.通过"网络技术的虚拟化",您会看到一些巧妙的.解决不同问题的技术. 2.3.1 网络逻辑分区 数据中心网络整合是一个明确的趋势,考虑到任何网络都在改善目标连接,这是一个常识性的问题,那就是多个物理网络是花费更高,通信基本设施难以构架和管理. 在统一数据中心网络中,资源(如端口和传输容量)可以实现最大化利用.然而,网络分区有很强的推动力,如不同的安全区域和多租户技

VMWare 网络连接模式(bridged、NAT、host-only)详解

host-only        在某些特殊的网络调试环境中,如何要求将真实环境和虚拟环境隔离开,这时你就可采用host-only模式.在host-only模式中,所有的虚拟系统是可以相互通信的,但虚拟系统和真实的网络是被隔离开的,VMWare虚拟机不能访问互联网. 提示:        在host-only模式下,虚拟系统和宿主机器系统是可以相互通信的,相当于这两台机器通过双绞线互连.         在host-only模式下,虚拟系统的TCP/IP配置信息(如IP地址.网关地址.DNS服务

在Linux中的使用 ss 命令检查套接字/网络连接

在Linux中的使用 ss 命令检查套接字/网络连接 ss是iproute2包的一部分(控制TCP/IP网络和流量的工具).iproute2的目标是替代先前用于配置网络接口.路由表和管理ARP表的标准Unix网络工具套装(通常称之为"net-tools").ss工具用于导出套接字统计,它可以显示与netstat类似的信息,且可以显示更多的TCP和状态信息.因为它直接从内核空间获取信息,所以会更快.ss的操作和netstat很像,所以这让它可以很容易就可以取代netstat. 使用和常见

linux网络编程-如何监测linux新的网络连接

问题描述 如何监测linux新的网络连接 我用openwrt做路由想监测到新的客户端连接,linux有这样的事件发送或消息传递么? 求大神指点 解决方案 好像1有模块直接编译进去可以实现