前段時間需要配置一台私網 ecs 聯外網,阿里雲比較推薦的方案是建立乙個 nat 閘道器並繫結 eip, 以此來統一所有 ecs 的網路出口。由於我已經擁有一台外網 ecs(不想多掏錢,且我自己的測試環境不需要嚴格的穩定性要求),因此我決定使用 iptables 對私網 ecs 的請求進行源位址轉換,這台外網 ecs 就作為其餘私網 ecs 的跳板機和網路**機。雖然原理和最後的解決方案都非常簡單,但查資料的過程卻廢了一番周折,於是決定將網路管理和 iptables 的知識點做乙個簡單的梳理。
這幾幅圖一目了然,不需要過多文字贅述了。舉個寫郵件的例子吧:
網路類別
最大網路數
ip 位址範圍
最大主機數
私有 ip 位址範圍
a2^7 -2
1.0.0.0-126.255.255.255
2^24 -2
10.0.0.0-10.255.255.255
b2^14
128.0.0.0-191.255.255.255
2^16 -2
172.16.0.0-172.31.255.255
c2^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專案的一部分。以下為使用方法和案例詳解(只記錄我認為的常用規則):
示意圖:
命令結構:
iptables [-t 表名] [-ai 鏈名] [-i/o 網絡卡名] [-p 協議名] [-s 源ip/子網] [--sport 源埠] [-d 目標ip/子網] [--dport 目標埠] [-j 控制型別]
表:
規則鏈:
控制型別:
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
這個網段內的所有私網伺服器都能聯外網了。
由於伺服器都在「雲上」,所以很多 linux 最基本的網路配置命令幾乎都用不著了,常用的就是一些測試或者檢視的命令,暫時收錄如下:
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網路管理
1.mac 位址負責區域網通訊,ip 位址負責外網通訊 2.檢視本機啟用的埠 netstat an a 檢視所有連線和監聽埠 n 顯示ip位址和埠號,而不顯示網域名稱和伺服器名 3.hosts檔案的優先順序是高於dns解析的 迭代查詢 本地dns伺服器向根dns伺服器等一系列伺服器請求某乙個ip 遞...
linux網路管理
linux網路管理 1.網路基礎 1.1 iso osi七層模型 ios 在計算機網路中,ios是網際網路作業系統,思科公司為其網路裝置開發的操作維護系統。應用層 給使用者提供服務 表示層 資料表示 加密 壓縮 會話層 對應用會話管理 同步 傳輸層 可靠與不可靠的傳輸 tcp udp 傳輸前的錯誤檢...
linux網路管理
1.ifconfig命令臨時配置ip位址ifconfig命令 檢視與配置網路狀態命令 ifconfig eth0 192.168.0.200 netmask 255.255.255.0 臨時設定eth0網絡卡的ip位址與子網掩碼 2.setup永久修改ip位址 3.修改配置檔案永久修改ip位址 1....