Linux 小记 — 网络管理
前言
前段时间需要配置一台私网 ECS 联外网,阿里云比较推荐的方案是创建一个 NAT 网关并绑定 EIP, 以此来统一所有 ECS 的网络出口。由于我已经拥有一台外网 ECS(不想多掏钱,且我自己的测试环境不需要严格的稳定性要求),因此我决定使用 Iptables 对私网 ECS 的请求进行源地址转换,这台外网 ECS 就作为其余私网 ECS 的跳板机和网络代理机。虽然原理和最后的解决方案都非常简单,但查资料的过程却废了一番周折,于是决定将网络管理和 Iptables 的知识点做一个简单的梳理。
1. OSI 七层模型与 TCP/IP 四层模型
(以下部分图片来自互联网,不知其最初作者,因此未标记来源。)
1.1 七层模型
1.2 四层模型
1.3 对应
这几幅图一目了然,不需要过多文字赘述了。举个写邮件的例子吧:
- 应用层:写邮件。
- 表示层:加密和翻译为二进制。
- 会话层:判断存储还是发送。
- 传输层:选择 TCP 协议和发送端口。
- 网络层:确定收发的 IP 地址和 MAC 地址。
- 数据链路层:物理寻址,即确定每一个网关。
- 物理层:各种硬件设备。
2. 地址与端口
2.1 IP 地址与子网掩码
此二者必须结合使用,子网掩码的作用就是将某个IP地址划分成网络地址和主机地址两部分。
IP 地址分类:
网络类别 | 最大网络数 | 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。
(广播地址只是一个标识,在数据包里面,如果目的地址是广播地址的话,就会向整个同一网段的主机发送广播包。)
2.2 其他地址
- 网关地址:具有路由功能的设备的IP地址,如:路由器、启用了路由协议的服务器(相当于路由器)、代理服务器(相当于路由器)。当网络中的主机发现数据包的目标主机不在本地网络中,就把数据包转发给它自己的网关,再由网关转发给目标网络的网关。一般设置为一个网段的起始或终止值,例:172.16.2.1 或 172.16.2.254。
- MAC地址:Media Access Control,具有全球唯一性。
- DNS地址:Domain Name Server(域名服务器),百度: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。
- SOCKS:1080。
- Oracle:1521。
- SQL Server:1433。
- MySQL:3306。
- MongoDB:27017。
- Redis:6379。
- Memcached:11211。
3. Iptables
3.1 Iptables 摘要
简单的说,Iptables 是一种能够轻易插入、修改和除去数据包过滤表中规则的工具,是netfilter项目的一部分。以下为使用方法和案例详解(只记录我认为的常用规则):
示意图:
命令结构:
iptables [-t 表名] [-AI 链名] [-I/o 网卡名] [-p 协议名] [-s 源IP/子网] [--sport 源端口] [-d 目标IP/子网] [--dport 目标端口] [-j 控制类型]
表:
- filter:默认表,配置规则允许或不允许,用于防火墙。
- nat:地址转换,用于网关路由器。
规则链:
- PREROUTING 路由前(用于目标地址转换 DNAT)。
- INPUT:数据包流入口。
- PORWARD:转发管卡。
- OUTPUT:数据包出口。
- POSTOUTING:路由后(用于源地址转换 SNAT)。
控制类型:
- ACCEPT/DROP/REJECT:接收/丢弃/重定向数据包。
- SNAT/DNAT:源地/目标址转换。
- MASQUERADE:IP伪装(NAT),用于ADSL。
- LOG:日志记录。
3.2 Iptables 实例
3.2.1 查看与清除规则
iptables [-t tables] [-nv] [-L]
# 参数说明:
-t table:默认为 filter, 可指定 nat。
-L :列出当前 table 的规则。
-n :不进行 IP 与 HOSTNAME 的反查(速度更快)。
-v :列出更多的信息,包括通过该规则的封包总位数、相关的网络接口等。
iptables [-t tables] [-FXZ]
# 参数说明:
-F :清空规则链。
-X :删除用户自定义的空链。
-Z :将所有链的计数与流量统计归零。
3.2.2 添加规则
参数说明:
-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 小节的命令结构足以满足大部分的应用场景了。
3.2.3 配置私网 ECS 联外网
前言中说了一些与之相关的梗概,本小结进行实际操作。首先,在 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
这个网段内的所有私网服务器都能联外网了。
4. 其他网络管理常用命令
由于服务器都在“云上”,所以很多 Linux 最基本的网路配置命令几乎都用不着了,常用的就是一些测试或者查看的命令,暂时收录如下:
- ping: 发送ICMP报文,常用:
ping -ic
,参数说明:interval、count。 - telnet: 查看端口是否联通,格式:
telnet ip port
。 - traceroute: 路由跟踪,格式:
traceroute hostname
。 - ifconfig: 查看网卡信息,其他的参数都不常用了。
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 的使用,若汝以之为尚可,拜请赞之 ~:)
我的公众号《有刻》,我们共同成长!
Linux 小记 — 网络管理的更多相关文章
- Linux nmcli 网络管理
Linux nmcli 网络管理 RHEL 和 CentOS 系统默认使用 NetworkManager 来提供网络服务,这是一种动态管理网络配置的守护进程,能够让网络设备保持连接状态.可以使用 nm ...
- 从Windows到linux小记
从Windows到linux小记 年后疯狂加班,趁着喘息的时间,更新一下安装linux的艰辛路程. 周四晚上,公司举办活动,好不容易从加班的节奏暂时脱离出来,我这人就是不能闲,只要一闲下来就会做die ...
- [转帖]Linux - NetworkManager网络管理工具
Linux - NetworkManager网络管理工具 linux运维菜 发布时间:18-10-3020:32优质原创作者 简介 网络管理器(NetworManager)是检测网络.自动连接网络的程 ...
- 第13章 Linux的网络管理
本文目录: 13.1 Linux数据包转发功能 13.2 和网络相关的几个文件说明 13.2.1 网卡配置文件ifcfg-* 13.2.2 DNS配置文件/etc/resolve.conf 13.2. ...
- linux -小记(3) 问题:linux 安装epel扩展源报错
EPEL提供的软件包大多基于其对应的Fedora软件包,不会与企业版Linux发行版本的软件发生冲突或替换其文件. epel安装对应的rpm包 centos5 32位epel源下载地址: www.li ...
- linux -小记(1) 问题:"linux ifconfig查看网卡名称与配置文件不否" 或 启动网卡提示“ eth0 似乎不存在, 初始化操作将被延迟”。
"linux ifconfig查看网卡名称与配置文件不否" 或 启动网卡提示" eth0 似乎不存在, 初始化操作将被延迟" . 问题 1. service n ...
- Linux小记
一.在vim中如何查看正在编辑的文件名 在正常模式下: :f 或 CTRL+G 查看文件的路径 用:!pwd 可以看当前的详细路径. 二.crontab 在crontab中, 命令crontab -e ...
- Linux之网络管理
一.网络基础 1)ISO/OSI七层模型简介 ISO:国际标准化组织 OSI:开放系统互联模型 IOS:苹果操作系统(在计算机网络中,IOS是互联网操作系统,是思科公司为其网络设备开发的操作维护系统) ...
- Linux命令--网络管理
write命令 Linux write命令用于传讯息给其他使用者. 使用权限:所有使用者. 语法 write user [ttyname] 参数说明: user : 预备传讯息的使用者帐号 ttyna ...
随机推荐
- 【编程技巧】 iOS 5的StoryBoard(故事板)的一些用法
从StroyBoard得到一个View UIViewController *viewController = [[UIStoryboard storyboardWithName:@"Main ...
- UML图学习之二 类图
类图(ClassDiagrams)是根据系统中的类以及各类之间的关系描述系统的静态视图.类图不仅显示系统内信息的结构,还描述系统内这些信息的行为.类图的一个重要目的是为其他图(如顺序图.交互图)定义一 ...
- 详解Office 外接程序 COM Add In的LoadBehavior及其妙用
Office的所有COM Add In,包括用Shared Add In模板和VSTO Add In模板创建的,都会在注表里面存储一些信息.对于当前用户安装的Add In,以Excel为例,对应的注册 ...
- 微信小程序实现顶部、底部联动滑动
这个场景一般用于展示数据时,数据过多,每条一行显示不下,表头可以横向滑动,下面要显示的数据部分横向纵向都可以滑动.表头或下面数据部分横向滑动的时候,两部分可以进行联动 具体效果像这样(随便写的丑样式布 ...
- MyEclipse中阿里JAVA代码规范插件(P3C)的安装及使用
JAVA代码规范插件(P3C)是阿里巴巴2017年10月14日在杭州云栖大会上首发的,使之前的阿里巴巴JAVA开发手册正式以插件形式公开走向业界.插件的相关信息及安装包都可以在GitHub(https ...
- CURL处理POST、GET请求
Curl是一个库,它允许你通过各种协议和各种不同的服务器进行连接和通讯 a.php <?php function curlRequest($url,$data=''){ $ch=curl_ini ...
- LVS-DR模式(原理图详解)
标签(空格分隔): linux 笔者Q:972581034 交流群:605799367.有任何疑问可与笔者或加群交流 前言 LVS一共四种工作模式.其中,DR模式是比较常用的模式之一,配置较麻烦,这里 ...
- 2017-12-30-如何彻底清除现存GIT仓库的大量提交历史
layout: post title: 2017-12-30-如何彻底清除现存GIT仓库的大量提交历史 key: 20171230 tags: GIT 版本管理 问答 modify_date: 201 ...
- 模型和字段 -- Django从入门到精通系列教程
该系列教程系个人原创,并完整发布在个人官网刘江的博客和教程 所有转载本文者,需在顶部显著位置注明原作者及www.liujiangblog.com官网地址. Python及Django学习QQ群:453 ...
- Linux中变量#,@,0,1,2,*,$$,$?的意思
$# 是传给脚本的参数个数 $0 是脚本本身的名字 $1 是传递给该shell脚本的第一个参数 $2 是传递给该shell脚本的第二个参数 $@ 是传给脚本的所有参数的列表 $* 是以一个单字符串显示 ...