JiangMengYa 2020-07-30
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
目标地址与掩码&之后的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
各司其职