liut

liut.xyz

NAT 和 iptables

Posted at — Oct 25, 2017

NAT

网络地址转换(NAT,Network Address Translation)属接入广域网(WAN)技术,是一种将私有(保留)地址转化为合法IP地址的转换技术。 是网络层协议。

目前最常用的端口多路复用NAPT(Network Address/Port Translators)中的Cone NAT型(圆锥型)。

客户机(内网终端)访问公网服务时,其IP和端口会被映射为网关的一个端口,客户机所有访问外网的流量均通过此端口,同时,此端口收到的所有数据包都会返回到客户机。在网关时,两个不同session但端口号相同

通常,家用网络终端通过家用路由器访问互联网就是通过NAT技术,家用路由器会被DHCP服务器分配一个临时的公网IP,用以访问公网;其它终端如手机、电脑和路由器组建一个私网,其中,路由器为网关(NAT服务器),终端设备访问外网服务时,其IP和端口会被映射为网关的一个端口。

NAT 和代理

iptables 的 nat 表, 可以设置 SNAT、DNAT、MASQUERADE。

SNAT 对源IP的转换

是指在数据包从网卡发送出去的时候,把数据包中的源地址部分替换为指定的IP,这样,接收方就认为数据包的来源是被替换的那个IP的主机

DNAT 对目标IP的转换

就是指数据包从网卡发送出去的时候,修改数据包中的目的IP,表现为如果你想访问A,可是因为网关做了DNAT,把所有访问A的数据包的目的IP全部修改为B,那么,你实际上访问的是B

MASQUERADE

是用发送数据的网卡上的IP来替换源IP,因此,对于那些IP不固定的场合,比如拨号网络或者通过dhcp分配IP的情况下,就得用 MASQUERADE

NAT 和 ip forward (IP 转发)

Linux系统默认是禁止数据包转发的。所谓转发即当主机拥有多于一块的网卡时,其中一块收到数据包,根据数据包的目的ip地址将包发往本机另一网卡,该网卡根据路由表继续发送数据包。

# 临时生效:
echo 1 > /proc/sys/net/ipv4/ip_forward

# 永久生效 修改sysctl.conf
net.ipv4.ip_forward = 1
comments powered by Disqus