前段時間須要配置一臺私網 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 的使用,若汝以之爲尚可,拜請贊之 ~:)
個人公衆號《捷義》