1. 程式人生 > >Linux 小記 — 網絡管理

Linux 小記 — 網絡管理

def ifconf mon 命令 其他 定向 .com 很多 都在

前言

前段時間需要配置一臺私網 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 小記 — 網絡管理