美文网首页
本地流量出站 2023-07-29

本地流量出站 2023-07-29

作者: 9_SooHyun | 来源:发表于2023-07-28 17:24 被阅读0次

    本地流量出站链路

    问题:目前需要ping google.com,从命令下发到icmp 请求完成出站的过程中,dns,防火墙和本地路由表分别起到了什么作用,它们在链路中的顺序是怎样的

    • DNS解析:首先,您的系统需要将域名google.com解析为一个IP地址。为此,系统会查询配置的DNS服务器。DNS服务器会查找与google.com关联的IP地址并将其返回给您的系统。如果DNS缓存中已经存在google.com的IP地址,这个过程会更快。

    • 防火墙:在确定了目标IP地址后,系统将检查防火墙规则,以确定是否允许向该IP地址发送ICMP Echo请求(ping请求)。如果防火墙规则允许此类请求,流程将继续。如果防火墙阻止了该请求,您将无法ping目标地址,可能会收到类似“请求超时”或“目标主机不可达”的错误消息。

    • 本地路由表:一旦防火墙允许ping请求,系统将根据本地路由表确定如何将请求路由到目标IP地址。路由表包含了关于如何将数据包从源IP地址路由到目标IP地址的信息。这包括网关、子网掩码和接口等信息。系统将根据路由表中的信息将ICMP Echo请求发送到适当的网关或直接到目标地址(如果在同一局域网上)。

    • 请求出站:在完成上述步骤后,ICMP Echo请求将从您的系统出站,沿着网络路径传输到google.com的服务器。然后,服务器将响应ICMP Echo应答,您的系统将接收到该应答,并显示ping请求的往返时间(RTT)

    出站链路顺序是:DNS解析 -> 防火墙检查 -> 本地路由表查找 -> 请求出站

    数据包在经过 iptables 的各个链(如 PREROUTING、INPUT、FORWARD、OUTPUT 和 POSTROUTING)的处理后,只有通过了相应的规则(没有被丢弃或拒绝),才会进入路由表进行路由选择。

    在这个过程中,iptables 可以根据配置的规则对数据包进行过滤、修改或其他操作。只有满足规则的数据包才能继续向下传递,最终进入路由表进行路由选择。如果在 iptables 的某个链中,数据包被丢弃或拒绝,那么它将不会进入路由表,也不会到达目标地址。

    本机网络不通,一般和【iptables或路由】的设置有关

    本机网络不通排查实战

    本机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的目标网络,应通过本地环回接口(loopback interface)进行路由,下一跳网关为127.0.0.1,ICMP请求实际上将在本地计算机上进行处理,而不是发送到外部网络】
    [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 ~]# 
    

    解析:

    • 用户执行ping 30.160.241.214命令,系统生成一个 ICMP 类型 8(echo request)的数据包。

    • 数据包进入 iptables 的 OUTPUT 链。在这里,数据包会遇到规则DROP icmp -- * * 0.0.0.0/0 30.160.241.214 icmptype 8,因为它是发往 30.160.241.214 的 ICMP 类型 8 数据包。根据这个规则,数据包会被丢弃。

    • 由于数据包在 iptables 的 OUTPUT 链被丢弃,它不会进入路由表进行路由选择。因此,即使路由表中有针对目标 IP 地址 30.160.241.214 的路由规则(30.160.241.0/24 via 127.0.0.1 dev lo scope link),数据包也不会被发送到本地回环接口(lo)。

    • 由于数据包在 iptables 的 OUTPUT 链被丢弃,它不会离开服务器,也不会到达目标 IP 地址 30.160.241.214。

    注:发往 localhost(即 127.0.0.1)的数据包会经过防火墙,但是它们不会通过物理网络接口,而是经过本地回环接口(lo,一个虚拟的网络接口)。

    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

    相关文章

      网友评论

          本文标题:本地流量出站 2023-07-29

          本文链接:https://www.haomeiwen.com/subject/nzcdpdtx.html