前段时间须要配置一台私网 ECS 联外网,阿里云比较推荐的方案是建立一个 NAT 网关并绑定 EIP, 以此来统一全部 ECS 的网络出口。因为我已经拥有一台外网 ECS(不想多掏钱,且我本身的测试环境不须要严格的稳定性要求),所以我决定使用 Iptables 对私网 ECS 的请求进行源地址转换,这台外网 ECS 就做为其他私网 ECS 的跳板机和网络代理机。虽然原理和最后的解决方案都很是简单,但查资料的过程却废了一番周折,因而决定将网络管理和 Iptables 的知识点作一个简单的梳理。
服务器
(如下部分图片来自互联网,不知其最初做者,所以未标记来源。)网络
这几幅图一目了然,不须要过多文字赘述了。举个写邮件的例子吧:socket
此两者必须结合使用,子网掩码的做用就是将某个IP地址划分红网络地址和主机地址两部分。
IP 地址分类:tcp
网络类别 | 最大网络数 | IP 地址范围 | 最大主机数 | 私有 IP 地址范围 |
---|---|---|---|---|
A | 2^7 -2 | 1.0.0.0-126.255.255.255 | 2^24 -2 | 10.0.0.0-10.255.255.255 |
B | 2^14 | 128.0.0.0-191.255.255.255 | 2^16 -2 | 172.16.0.0-172.31.255.255 |
C | 2^21 | 192.0.0.0-223.255.255.255 | 2^8 -2 | 192.168.0.0-192.168.255.255 |
子网掩码及子网规划:工具
地址 | 网络位 | 网络位 | 子网位 | 主机位 |
---|---|---|---|---|
IP地址(172.16.2.121) | 10101100 | 00010000 | 00000010 | 01111001 |
子网掩码(255.255.255.0) | 11111111 | 11111111 | 11111111 | 00000000 |
网络地址 | 10101100 | 00010000 | 00000010 | 00000000 |
广播地址 | 10101100 | 00010000 | 00000010 | 11111111 |
网络地址 = IP 地址 & 子网掩码。
广播地址 = 网络地址的主机位(子网掩码为0的部分)全换成1。
(广播地址只是一个标识,在数据包里面,若是目的地址是广播地址的话,就会向整个同一网段的主机发送广播包。)测试
简单的说,Iptables 是一种可以轻易插入、修改和除去数据包过滤表中规则的工具,是netfilter项目的一部分。如下为使用方法和案例详解(只记录我认为的经常使用规则):阿里云
示意图:
加密
命令结构:spa
iptables [-t 表名] [-AI 链名] [-I/o 网卡名] [-p 协议名] [-s 源IP/子网] [--sport 源端口] [-d 目标IP/子网] [--dport 目标端口] [-j 控制类型]
表:翻译
规则链:
控制类型:
iptables [-t tables] [-nv] [-L] # 参数说明: -t table:默认为 filter, 可指定 nat。 -L :列出当前 table 的规则。 -n :不进行 IP 与 HOSTNAME 的反查(速度更快)。 -v :列出更多的信息,包括经过该规则的封包总位数、相关的网络接口等。 iptables [-t tables] [-FXZ] # 参数说明: -F :清空规则链。 -X :删除用户自定义的空链。 -Z :将全部链的计数与流量统计归零。
参数说明:
-A/I 链名:添加规则,-A为在原规则后追击;-I 则为插入,若未指定行,则插入到第一行,例:iptables -I 2 INPUT -j ACCEPT。 -i/o 网卡名:匹配网卡流入/出。 -p 协议名:主要有tcp、udp、icmp 和 all。 -s/d 源/目标 IP/子网: -s 172.16.205.1 172.16.205.0/24 172.16.205.0/255.255.255.0 IP:172.16.205.1 -s ! 172.16.205.0/24 ...
以上说明再结合 3.1 小节的命令结构足以知足大部分的应用场景了。
前言中说了一些与之相关的梗概,本小结进行实际操做。首先,在 VPC 专有网络中添加一条路由规则,以下:
下一跳实例为外网 ECS 实例。
其次,在外网 ECS(172.16.200.1)中开启内核路由转发功能:
# 临时 echo 1 > /proc/sys/net/ipv4/ip_forward sysctl -p # 永久 echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf sysctl -p
再根据 VPC 网段添加一条转发规则,例如个人是:
iptables -t nat -A POSTROUTING -s 172.16.205.0/24 -j SNAT --to-source 172.16.200.1
以后,只要是在 172.16.205.0/24
这个网段内的全部私网服务器都能联外网了。
因为服务器都在“云上”,因此不少 Linux 最基本的网路配置命令几乎都用不着了,经常使用的就是一些测试或者查看的命令,暂时收录以下:
ping -ic
,参数说明:interval、count。telnet ip port
。traceroute hostname
。netstat: 监控 TCP/IP 网络,经常使用参数:
-a # 显示全部socket,包括正在监听的。 -l # 显示有在 Listen (监听) 的服务状态。 -n # 以网络IP地址代替名称,显示网络链接情形。 -t # 显示TCP协议的链接状况。 -u # 显示UDP协议的链接状况。
常与 grep 结合使用,如 netstat -atuln | grep ':80'
:
route:
route -n # 查询路由状态。 route add/del default gw 172.16.200.1 #添加/删除默认网关。
以上主要简述了 TCP/IP 模型和 Iptables 的使用,若汝以之为尚可,拜请赞之 ~:)
个人公众号《有刻》,咱们共同成长!