前言前段时间需要一个私有的ECS,需要连接外网。阿里云推荐的方案是创建一个NAT网关,绑定EIP统一所有ECS网络出口。由于外网已经有一台ECS(不想多花钱,而且自己的测试环境对稳定性要求不高),所以决定使用Iptables对ECS的请求进行源地址转换专用网络。ECS作为其他私网ECS的跳板和网络代理。虽然原理和最终的解决方案都很简单,但是查找资料的过程浪费了很多波折,所以决定对网管和Iptables的知识点做一个简单的梳理。一、OSI七层模型和TCP/IP四层模型(以下图片来源于网络,原作者不详,故不标注出处)1.1七层模型1.2四层模型1.3对应这些图片一目了然,无需翻阅太多文字重复。我们以写邮件为例:应用层:写邮件。表示层:加密和二进制转换。会话层:决定是存储还是发送。传输层:选择TCP协议和发送端口。网络层:确定发送和接收的IP地址和MAC地址。数据链路层:物理寻址,即标识各个网关。物理层:各种硬件设备。2、地址和端口2.1IP地址和子网掩码必须一起使用。子网掩码的作用是将一个IP地址分为网络地址和主机地址两部分。IP地址分类:网络类别最大网络数IP地址范围最大主机数私有IP地址范围A2^7-21.0.0.0-126.255.255.2552^24-210.0.0.0-10.255.255.255B2^14128.0.0.0-191.255。255.2552^16-2172.16.0.0-172.31.255.255C2^21192.0.0.0-223.255.255.2552^8-2192.168.0.0-192.168.255.255子网掩码和子网规划:addressnetworkbitnetworkbitsubnetbithostbit1IPaddress(172.72.2.121)10101100000100000000001001001111001subnetmask(255.255.255.0)111111111111111111111111100000000networkAddress1010110000000000000000000Broadcastaddress10101100000000000000000000111111IPaddressBroadcastaddress=Thehostbitsofthenetworkaddress(thepartwherethesubnetmaskis0)areallreplacedwith1s.(广播地址只是一个标识,在数据包中,如果目的地址是广播地址,广播包将发送给同一网段的主机。)2.2其他地址网关地址:设备的IP地址具有路由功能,如:路由器、启用路由协议的服务器(相当于路由器)、代理服务器(相当于路由器)。当网络中的主机发现数据包的目标主机不在本地网络中时,将数据包转发给自己的网关,再由网关转发给目标网络的网关。一般设置为网段的起始值或结束值,例如:172.16.2.1或172.16.2.254。MAC地址:MediaAccessControl,全球唯一。DNS地址:DomainNameServer(域名服务器),百度:114.114.114.114,谷歌:8.8.8.8。DHCP:指由服务器控制的一个IP地址范围。客户端登录服务器时,可以自动获取服务器分配的IP地址和子网掩码。改善地址使用。2.3常用端口FTP:20,21.SSH:22.Telnet:23.DNS:53.HTTP(s):80(443).SMTP:25。POP3:110。袜子:1080。甲骨文:1521。SQLServer:1433.MySQL:3306.MongoDB:27017.Redis:6379.Memcached:11211.3.Iptables3.1Iptables总结简单来说,Iptables是一个可以方便的在包过滤表中插入、修改和删除规则的工具,并且是netfilter项目的一部分。下面详细讲解使用方法和案例(只记录我认为常用的规则):示意图:命令结构:iptables[-t表名][-AI链名][-I/O网卡名][-p协议名称][-s源IP/子网][--sport源端口][-d目标IP/子网][--dport目标端口][-j控制类型]table:filter:默认表,配置规则是否允许,对于防火墙。nat:地址转换,用于网关路由器。规则链:路由前的PREROUTING(用于目标地址转换DNAT)。INPUT:数据包流入口。PORWARD:转发管道卡。输出:数据包导出。POSTOUTING:后路由(用于源地址转换SNAT)。控制类型:ACCEPT/DROP/REJECT:接收/丢弃/重定向数据包。SNAT/DNAT:源/目标地址转换。MASQUERADE:IP伪装(NAT),用于ADSL。日志:记录。3.2iptables示例3.2.1查看和清除规则iptables[-ttables][-nv][-L]#参数说明:-ttable:默认为filter,可以指定nat。-L:列出当前表的规则。-n:不检查IP和HOSTNAME(更快)。-v:列出更多信息,包括通过规则的数据包总数、相关网络接口等。iptables[-ttables][-FXZ]#参数说明:-F:清除规则链。-X:删除用户定义的空链。-Z:将所有链计数和流量统计清零。3.2.2添加规则参数说明:-A/I链名:添加规则,-A为沿用原规则;-I是插入,如果没有指定行,则插入到第一行,例如:iptables-I2INPUT-jACCEPT。-i/o网卡名称:匹配网卡in/out。-p协议名称:主要是tcp、udp、icmp等。-s/d源/目标IP/子网:-s172.16.205.1172.16.205.0/24172.16.205.0/255.255.255.0IP:172.16.205.1-s!172.16.205.0/24...以上说明结合3.1节中的命令结构足以满足大部分应用场景。3.2.3配置私网ECS连接外网。前言中提到了一些相关的大纲,这个总结是为了实际操作。首先在VPC私网中添加一条路由规则,如下:下一跳实例为外网ECS实例。其次,在外网ECS(172.16.200.1)开启内核路由转发功能:#Temporaryecho1>/proc/sys/net/ipv4/ip_forwardsysctl-p#Permanentecho'net.ipv4.ip_forward=1'>>/etc/sysctl.confsysctl-p根据VPC网段添加转发规则,比如我的是:iptables-tnat-APOSTROUTING-s172.16.205.0/24-jSNAT--to-source172.16.200.1,只要是172.16.205.0/24网段的所有私网服务器都可以连接外网。4、网络管理的其他常用命令由于服务器都在“云端”,Linux中很多最基本的网络配置命令几乎用不上。常用的命令是一些测试或查看的命令,暂列如下:ping:SendICMPMessage,常用:ping-ic,参数说明:interval,count。telnet:查看端口是否连通,格式:telnetipport。traceroute:路由跟踪,格式:traceroute主机名。ifconfig:查看网卡信息,其他参数不常用。netstat:监控TCP/IP网络,常用参数: -a#显示所有套接字,包括正在监听的套接字。 -l#在Listening中显示服务的状态。 -n#使用网络IP地址代替名称显示网络连接状态。 -t#显示TCP协议的连接状态。 -u#显示UDP协议的连接状态。常与grep结合使用,如netstat-atuln|grep':80':route:route-n#查询路由状态。routeadd/deldefaultgw1??72.16.200.1#添加/删除默认网关。结束语以上主要简单介绍了TCP/IP模型和Iptables的使用。如果觉得可以,请点个赞~:)我的公众号《捷义》
