iptables

iptables:

定义:命令行工具,用来和内核的netfilter模块通信;

作用:用来管理网络,做一个流量转发;

DNAT:目标地址映射

应用场景:内网做对外服务器;

电脑(外部用户):10.10.10.10(src)

公网服务器:22.22.22.22(dst)

此时,一条TCP(src - >dst:80);

内网服务器:均摊请求流量

192.168.1.1:

192.168.1.2

源端口随机分配,外部的人想请求内部的服务;

公网服务器两张网卡,对内,对外

公网网卡PPPOE拨号上网22.22.22.22   内网网卡:交换机(基于MAC地址的转发,来自于公网服务器网线+内网服务器网线,共属于一个lan)

ARP广播:谁的IP是192.168.1.1  请告诉我你的MAC地址  局域网通讯的原理

公网服务器(路由器):22.22.22.22  内网服务器:192.168.1.1   192.168.1.2  (由路由器分配,接入交换机,DHCP获取IP地址)

ps aux | grep dhcp

arp -a  (类似于吆喝一声,告诉我你们的MAC地址)

内网电脑如何上网:只能通过路由器

百度网站:10.10.10.10(dst)

内网服务器:192.168.1.2(src)

网关:Linux路由表  route -n

iptables

 目标地址与掩码&之后的IP是否是Destnation,从Iface网卡送出去UG表示网关,gateway

src_mac:自己的MAC  

dst_mac:网关的MAC(ARP广播所得);

数据包会被192.168.100.1收到;

路由器角度:

MAC地址的确是路由器,但是目标IP地址不是我,

linux内核:首先MAC地址必须是我,否则和我没关,但是目标IP不是我,Linux内核会查看自己的路由表,即路由器查看自己的路由表

路由器默认网关:运营商节点;数据一定可以送到百度;dst_mac变成了运营商的网络节点

路由规则:192.168.2.X  lan0  (192.168.2.110)

路由器发到公网前:源地址改写 22.22.22.22  目标地址保持不变10.10.10.10(地址转化SNAT源地址映射)

数据回来:

从百度角度来看:

数据包来源IP:(192.168.1.2)    22.22.22.22  目标IP确实是我

百度回包:

src_ip:101.10.10.10   dst_ip:192.168.2.2(回程丢包)   22.22.22.22(路由器收到报文了) 

路由器:的确是我,但这个包我没用啊,路由器能找到当初的转换关系,将包还原,源地址保持不变,目标地址改成当初的192.168.1.2   扔包到lan上

内网服务器视角:源ip:10.10.10.10    目标地址:192.168.1.2

各司其职

相关推荐