本地流量出站鏈路
問題:目前需要ping google.com,從命令下發(fā)到icmp 請求完成出站的過程中,dns,防火墻和本地路由表分別起到了什么作用,它們在鏈路中的順序是怎樣的
DNS解析:首先,您的系統(tǒng)需要將域名google.com解析為一個IP地址。為此,系統(tǒng)會查詢配置的DNS服務(wù)器。DNS服務(wù)器會查找與google.com關(guān)聯(lián)的IP地址并將其返回給您的系統(tǒng)。如果DNS緩存中已經(jīng)存在google.com的IP地址,這個過程會更快。
防火墻:在確定了目標IP地址后,系統(tǒng)將檢查防火墻規(guī)則,以確定是否允許向該IP地址發(fā)送ICMP Echo請求(ping請求)。如果防火墻規(guī)則允許此類請求,流程將繼續(xù)。如果防火墻阻止了該請求,您將無法ping目標地址,可能會收到類似“請求超時”或“目標主機不可達”的錯誤消息。
本地路由表:一旦防火墻允許ping請求,系統(tǒng)將根據(jù)本地路由表確定如何將請求路由到目標IP地址。路由表包含了關(guān)于如何將數(shù)據(jù)包從源IP地址路由到目標IP地址的信息。這包括網(wǎng)關(guān)、子網(wǎng)掩碼和接口等信息。系統(tǒng)將根據(jù)路由表中的信息將ICMP Echo請求發(fā)送到適當?shù)木W(wǎng)關(guān)或直接到目標地址(如果在同一局域網(wǎng)上)。
請求出站:在完成上述步驟后,ICMP Echo請求將從您的系統(tǒng)出站,沿著網(wǎng)絡(luò)路徑傳輸?shù)絞oogle.com的服務(wù)器。然后,服務(wù)器將響應(yīng)ICMP Echo應(yīng)答,您的系統(tǒng)將接收到該應(yīng)答,并顯示ping請求的往返時間(RTT)
出站鏈路順序是:DNS解析 -> 防火墻檢查 -> 本地路由表查找 -> 請求出站
數(shù)據(jù)包在經(jīng)過 iptables 的各個鏈(如 PREROUTING、INPUT、FORWARD、OUTPUT 和 POSTROUTING)的處理后,只有通過了相應(yīng)的規(guī)則(沒有被丟棄或拒絕),才會進入路由表進行路由選擇。
在這個過程中,iptables 可以根據(jù)配置的規(guī)則對數(shù)據(jù)包進行過濾、修改或其他操作。只有滿足規(guī)則的數(shù)據(jù)包才能繼續(xù)向下傳遞,最終進入路由表進行路由選擇。如果在 iptables 的某個鏈中,數(shù)據(jù)包被丟棄或拒絕,那么它將不會進入路由表,也不會到達目標地址。
本機網(wǎng)絡(luò)不通,一般和【iptables或路由】的設(shè)置有關(guān)
本機網(wǎng)絡(luò)不通排查實戰(zhàn)
本機ping不通30.160.241.214,請排查
[root@VM-100-149-centos ~]# ping 30.160.241.214
PING 30.160.241.214 (30.160.241.214) 56(84) bytes of data.
ping: sendmsg: Operation not permitted
ping: sendmsg: Operation not permitted
^C
--- 30.160.241.214 ping statistics ---
5 packets transmitted, 0 received, 100% packet loss, time 4086ms
查看iptables:
[root@VM-100-149-centos ~]# #【iptables DROP了目的地是30.160.241.214的icmp請求】
[root@VM-100-149-centos ~]# iptables -t filter -L OUTPUT --line-numbers -v -n | grep 30.160.241.214
4 5 420 DROP icmp -- * * 0.0.0.0/0 30.160.241.214 icmptype 8
[root@VM-100-149-centos ~]# iptables -t filter -D OUTPUT 4
[root@VM-100-149-centos ~]#
查看路由表:
[root@VM-100-149-centos ~]# # 【路由表將 30.160.241.0/24的目標網(wǎng)絡(luò),應(yīng)通過本地環(huán)回接口(loopback interface)進行路由,下一跳網(wǎng)關(guān)為127.0.0.1,ICMP請求實際上將在本地計算機上進行處理,而不是發(fā)送到外部網(wǎng)絡(luò)】
[root@VM-100-149-centos ~]# route -en | grep 30.160.
30.160.241.0 127.0.0.1 255.255.255.0 UG 0 0 0 lo
[root@VM-100-149-centos ~]# ip route list table main | grep 30.160.241 # or ip route show | grep 30.160.241.214
30.160.241.0/24 via 127.0.0.1 dev lo scope link
[root@VM-100-149-centos ~]# ip route del 30.160.241.0/24 via 127.0.0.1 dev lo scope link
[root@VM-100-149-centos ~]#
ping通:
[root@VM-100-149-centos ~]# ping 30.160.241.214
PING 30.160.241.214 (30.160.241.214) 56(84) bytes of data.
64 bytes from 30.160.241.214: icmp_seq=1 ttl=64 time=1.65 ms
64 bytes from 30.160.241.214: icmp_seq=2 ttl=64 time=1.59 ms
64 bytes from 30.160.241.214: icmp_seq=3 ttl=64 time=1.62 ms
^C
--- 30.160.241.214 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2003ms
rtt min/avg/max/mdev = 1.591/1.626/1.658/0.027 ms
[root@VM-100-149-centos ~]#
解析:
用戶執(zhí)行
ping 30.160.241.214命令,系統(tǒng)生成一個 ICMP 類型 8(echo request)的數(shù)據(jù)包。數(shù)據(jù)包進入 iptables 的 OUTPUT 鏈。在這里,數(shù)據(jù)包會遇到規(guī)則
DROP icmp -- * * 0.0.0.0/0 30.160.241.214 icmptype 8,因為它是發(fā)往30.160.241.214的 ICMP 類型 8 數(shù)據(jù)包。根據(jù)這個規(guī)則,數(shù)據(jù)包會被丟棄。由于數(shù)據(jù)包在 iptables 的 OUTPUT 鏈被丟棄,它不會進入路由表進行路由選擇。因此,即使路由表中有針對目標 IP 地址 30.160.241.214 的路由規(guī)則(30.160.241.0/24 via 127.0.0.1 dev lo scope link),數(shù)據(jù)包也不會被發(fā)送到本地回環(huán)接口(lo)。
由于數(shù)據(jù)包在 iptables 的 OUTPUT 鏈被丟棄,它不會離開服務(wù)器,也不會到達目標 IP 地址 30.160.241.214。
注:發(fā)往 localhost(即 127.0.0.1)的數(shù)據(jù)包會經(jīng)過防火墻,但是它們不會通過物理網(wǎng)絡(luò)接口,而是經(jīng)過本地回環(huán)接口(lo,一個虛擬的網(wǎng)絡(luò)接口)。
packets to 127.0.0.1 aren't allowed "outside" the computer. But they still go out of the firewall and are sent to lo