为什么在本机发往本机 ip 的流量都走 lo 网卡? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
lindas
V2EX    Linux

为什么在本机发往本机 ip 的流量都走 lo 网卡?

  •  1
     
  •   lindas 2023-05-06 11:16:19 +08:00 2365 次点击
    这是一个创建于 894 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近我在学习策略路由,因此接触到了 ip ruleip route 命令。在使用 ip route show table local 命令查看本地路由表时,我注意到了一条路由的信息如下:

    local 192.168.2.37 dev ens18 proto kernel scope host src 192.168.2.37 

    这条路由似乎表示,源 IP 地址为 192.168.2.37 ,目标 IP 地址也为 192.168.2.37 的流量将从 ens18 网卡输出。然而,当我使用 ip route get from 192.168.2.37 to 192.168.2.37 命令查询路由时,输出结果显示 dev 为 lo:

    local 192.168.2.60 from 192.168.2.37 dev lo uid 0 cache <local> 

    因此,我有以下几个疑问:

    1. 除了 ip route 命令之外,是否还有其他机制控制本机发往本机的流量?
    2. 当添加本地路由时(例如 ip route add table local local 5.5.5.6 dev ens19),dev 字段的作用是什么?我进行了测试,无论将 dev 设置为 ens18 、ens19 还是 lo ,查询路由的结果始终输出到 dev lo

    麻烦大佬指点一下~


    补充一下我系统的信息

    系统版本:

    [root@archlinux ~]# uname -a Linux archlinux 6.1.10-hardened1-1-hardened #1 SMP PREEMPT_DYNAMIC Tue, 07 Feb 2023 19:30:39 +0000 x86_64 GNU/Linux 

    ip 地址:

    [root@archlinux ~]# ip address 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: ens18: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000 link/ether 3a:9a:34:ce:3f:86 brd ff:ff:ff:ff:ff:ff altname enp0s18 inet 192.168.2.37/24 brd 192.168.2.255 scope global dynamic noprefixroute ens18 valid_lft 84848sec preferred_lft 84848sec inet6 fe80::fa61:fb21:1948:3202/64 scope link noprefixroute valid_lft forever preferred_lft forever 3: ens19: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000 link/ether 46:df:d2:42:02:63 brd ff:ff:ff:ff:ff:ff altname enp0s19 inet 192.168.2.60/24 brd 192.168.2.255 scope global dynamic noprefixroute ens19 valid_lft 84848sec preferred_lft 84848sec inet6 fe80::f895:5e74:b58f:583f/64 scope link noprefixroute valid_lft forever preferred_lft forever 

    local 路由表:

    [root@archlinux ~]# ip route show table local local 127.0.0.0/8 dev lo proto kernel scope host src 127.0.0.1 local 127.0.0.1 dev lo proto kernel scope host src 127.0.0.1 broadcast 127.255.255.255 dev lo proto kernel scope link src 127.0.0.1 local 192.168.2.37 dev ens18 proto kernel scope host src 192.168.2.37 local 192.168.2.60 dev ens19 proto kernel scope host src 192.168.2.60 broadcast 192.168.2.255 dev ens18 proto kernel scope link src 192.168.2.37 broadcast 192.168.2.255 dev ens19 proto kernel scope link src 192.168.2.60 
    12 条回复    2023-05-18 16:24:49 +08:00
    bingfengfeifei
        1
    bingfengfeifei  
       2023-05-06 14:10:13 +08:00
    `local - the destinations are assigned to this host. The packets are looped back and delivered locally.`
    应该写了 local 就只能是往 lo 发了吧,我感觉 dev 是给屏蔽掉了。
    Huelse
        2
    Huelse  
       2023-05-06 14:23:13 +08:00
    据我所知,所有本地流量都会走 lo 接口的,无论你分配什么网卡
    iBugOne
        3
    iBugOne  
       2023-05-06 14:25:59 +08:00 via Android   1
    对于 local 类型的路由,dev 的意义在于响应 ARP/NDP ,尤其是当你设置 net.ipv4.conf.all.arp_filter=1 的时候
    githmb
        4
    githmb  
       2023-05-06 14:36:10 +08:00
    感觉很合理啊,机器可能接入不同的子网,这些子网直接可能无法通信,一个绑定到 A 网的 socket 无法连接到 B 网的其它机器,但是仍然可以和本机的 B 网 IP 通信
    artnowben
        5
    artnowben  
       2023-05-06 15:13:21 +08:00   1
    Linux 手机按摩膏,两个 IP 在同一个主机上,就没有必要出网卡。
    如果有两个网卡,分别用 DPDK 程序相互通讯,就会出网卡,看起来就像两个主机之间通讯一样,因为 dpdk 程序是 bypass kernel ,直接使用网卡,不经过 Linux kernel 的协议栈。dperf 可以做这种试验,一个网卡做客户端,一个网卡做服务器 https://github.com/baidu/dperf
    artnowben
        6
    artnowben  
       2023-05-06 15:16:51 +08:00   1
    还有一种试验,把两个网卡分别放到一个独立的 network namespace 里面,他们之间通讯也会出网卡。
    参考代码:
    NIC=eth1
    ADDR=192.168.1.100
    PREFIX=24
    GATEWAY=192.168.1.1

    ip netns list
    ip netns add ns1
    ip link set $NIC netns ns1
    sleep 4

    ip netns exec ns1 ifconfig $NIC up

    ip netns exec ns1 ip addr add $ADDR/$PREFIX dev $NIC
    ip netns exec ns1 route add default gw $GATEWAY
    mrzx
        7
    mrzx  
       2023-05-06 15:42:01 +08:00
    请问 OP 一下,你是出于什么需求或者场景,需要用策略路由啊?
    digimoon
        8
    digimoon  
       2023-05-06 15:49:26 +08:00
    @mrzx 一般最简单的场景是,哪个网卡进来的数据,就从哪个网卡原路出去
    lindas
        9
    lindas  
    OP
       2023-05-06 16:57:07 +08:00
    @mrzx 多网卡环境下给不同网卡配置默认路由的时候会用到
    lindas
        10
    lindas  
    OP
       2023-05-06 17:46:33 +08:00
    @artnowben 还真是,看来在 Linux kernel 里的协议栈有对本机发本机的流量做什么处理
    lindas
        11
    lindas  
    OP
       2023-05-06 17:48:57 +08:00
    @githmb 对呀,接触到 ip route 的 local 路由表之前一直觉得很正常,看到 ip route 的 local 路由表之后也只是对 ip route 产生疑问而已
    julyclyde
        12
    julyclyde  
       2023-05-18 16:24:49 +08:00
    @lindas 应该不存在“不同网卡的”默认路由这个概念
    route 和 interface 是不同层次的概念

    multihomed 主机配置路由的时候,如果不用策略路由、源路由等特殊情况,那基本上就只能有一个“默认”了
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3235 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 11:18 PVG 19:18 LAX 04:18 JFK 07:18
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86