Linux 小記 — 網絡管理

前言

前段時間須要配置一臺私網 ECS 聯外網,阿里雲比較推薦的方案是建立一個 NAT 網關並綁定 EIP, 以此來統一全部 ECS 的網絡出口。因爲我已經擁有一臺外網 ECS(不想多掏錢,且我本身的測試環境不須要嚴格的穩定性要求),所以我決定使用 Iptables 對私網 ECS 的請求進行源地址轉換,這臺外網 ECS 就做爲其他私網 ECS 的跳板機和網絡代理機。雖然原理和最後的解決方案都很是簡單,但查資料的過程卻廢了一番周折,因而決定將網絡管理和 Iptables 的知識點作一個簡單的梳理。
服務器

1. OSI 七層模型與 TCP/IP 四層模型

(如下部分圖片來自互聯網,不知其最初做者,所以未標記來源。)網絡

1.1 七層模型

1.2 四層模型


1.3 對應


這幾幅圖一目瞭然,不須要過多文字贅述了。舉個寫郵件的例子吧:socket

  • 應用層:寫郵件。
  • 表示層:加密和翻譯爲二進制。
  • 會話層:判斷存儲仍是發送。
  • 傳輸層:選擇 TCP 協議和發送端口。
  • 網絡層:肯定收發的 IP 地址和 MAC 地址。
  • 數據鏈路層:物理尋址,即肯定每個網關。
  • 物理層:各類硬件設備。

2. 地址與端口

2.1 IP 地址與子網掩碼

此兩者必須結合使用,子網掩碼的做用就是將某個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。
(廣播地址只是一個標識,在數據包裏面,若是目的地址是廣播地址的話,就會向整個同一網段的主機發送廣播包。)測試

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項目的一部分。如下爲使用方法和案例詳解(只記錄我認爲的經常使用規則):阿里雲

示意圖:
加密

命令結構:spa

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 的使用,若汝以之爲尚可,拜請贊之 ~:)


個人公衆號《捷義》
qrcode_for_gh_c1a4cd5ae0fe_430.jpg

相關文章
相關標籤/搜索