V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
Getting
V2EX  ›  Linux

Route 路由表问题

  •  
  •   Getting · 2022-03-21 09:58:33 +08:00 · 3722 次点击
    这是一个创建于 973 天前的主题,其中的信息可能已经有所发展或是发生改变。
    因为双 WAN 接入 移动 eth0.3 电信 pppoe-wan
    想让 152.69.*.*走移动( eth0.3 )
    使用路由表:route add -host 152.69.*.* dev eth0.3
    ping 不通 152.69.*.*





    然后写了网关就能 ping 通了 这是为什么? 不是网关带*会自动选该接口默认的网关吗?没搞懂,
    如果要指定网关的话 为什么路由表里内网网段 192.168.5.0 也是 0.0.0.0 (*) 都可以正常上网呢?

    route add -host 152.69.*.* gw 10.1.1.1

    22 条回复    2022-03-28 17:53:59 +08:00
    lcy630409
        1
    lcy630409  
       2022-03-21 10:08:30 +08:00
    .....
    搞混淆概念了
    192.168.5.0 网关为 0000 ,意思是 这个 192.168.5.0 网段 是不出路由的。你说的正常上网 是客户端 用了 192.168.5.2 这种 ip 可以上网吧?客户端得到了 192.168.5.2 但是他的上级网关是路由啊,路由的上级网关 是根据路由表 0.0.0.0 去了 115.218.232.1 这个网关
    XiLingHost
        2
    XiLingHost  
       2022-03-21 10:11:32 +08:00
    试试添加 152.69.0.0/16 的路由表而非使用通配符
    huangya
        3
    huangya  
       2022-03-21 10:13:22 +08:00
    不要用 route add -host 152.69.*.* dev eth0.3 。  直接 route add -net 152.69.0.0/16 gw 10.1.1.1
    defunct9
        4
    defunct9  
       2022-03-21 10:13:42 +08:00
    你得搞策略路由
    Getting
        5
    Getting  
    OP
       2022-03-21 10:24:45 +08:00
    @lcy630409 貌似懂了一点了 假设网关是 192.168.5.1 客户端确实是写了网关才出去了 但是到了 br-lan 这条 他的路由网关是 0000 所以走了 115.218.232.1 这个网关出去了呀 我 152.69.*.*不该走 0.0.0.0 从 10.1.1.1 出去吗? hhhh
    Getting
        6
    Getting  
    OP
       2022-03-21 10:25:16 +08:00
    @huangya 不是呀 我想试试这个 dev 参数为什么会行不通 加 gw 我知道可以出去
    Getting
        7
    Getting  
    OP
       2022-03-21 10:26:29 +08:00
    @defunct9 不会写策略路由呀 我想找到简单的方法 感觉就路由表最简单实现功能了 mwan3 整了很久太复杂了感觉
    Getting
        8
    Getting  
    OP
       2022-03-21 10:27:18 +08:00
    @XiLingHost 我没用通配符 我就是写了准确的 ip 地址 只是发出来的时候写了*号 不然暴露 ip 了额
    Getting
        9
    Getting  
    OP
       2022-03-21 10:39:28 +08:00
    @lcy630409
    第一行:是一个默认路由,这表明如果没有精确匹配路由,就会将 IP 报文发送到 IP 地 址 192.168.43.1 上。UG 表示一个启用的网关地址。br-lan 表示出接口地址。
    第二行:是一个接口路由,为局域网接口的路由项,表示局域网为 192.168.43.0 网段。br-lan 表示通过该网卡和局域网网络相连接。
    第三行:是一个接口路由,表示目的地址是主机地址。这在接口配置 IP 和掩码时会默认自动设置上。如果不设置掩码则默认 A 类地址为 8 位掩码,B 类地址为 16 位掩码,C 类地址为 24 位掩码。


    看了这个 懂了懂了 意思就是指定外网 ip 必须要用网关 不然就只能在路由内部跑了 出不去了 是这个意思了吧?
    yanqiyu
        10
    yanqiyu  
       2022-03-21 11:56:11 +08:00
    route add -host 152.69.*.* dev eth0.3 这一跳就成了 on-link 了。但实际上这一跳要发给网关。
    Getting
        11
    Getting  
    OP
       2022-03-21 12:58:12 +08:00
    @yanqiyu 对对 搞明白了现在
    guoooo00oohao
        12
    guoooo00oohao  
       2022-03-21 15:13:35 +08:00
    在 linux 下面可以使用 ip route get 的命令测试一下 target ip match 到哪个路由, 验证你的配置.
    lcy630409
        13
    lcy630409  
       2022-03-21 17:14:16 +08:00
    @Getting
    多条出口的时候 看跃点数,115 的这个跃点数是 40, 10.1 这个是 41
    按小的走
    CallMeReznov
        14
    CallMeReznov  
       2022-03-21 17:17:24 +08:00
    route 还支持*?
    学到了....
    Getting
        15
    Getting  
    OP
       2022-03-21 17:18:46 +08:00
    @guoooo00oohao
    root@OpenWrt:~# route add -host 152.69.198.162 dev eth0.3
    root@OpenWrt:~# ip route get 152.69.198.162
    152.69.198.162 dev eth0.3 src 10.1.1.123 uid 0
    cache


    root@OpenWrt:~# route add -host 152.69.*.* gw 10.1.1.1
    root@OpenWrt:~# ip route get 152.69.*.*
    152.69.198.162 via 10.1.1.1 dev eth0.3 src 10.1.1.123 uid 0
    cache

    就是少了个 via 10.1.1.1
    Getting
        16
    Getting  
    OP
       2022-03-21 17:19:17 +08:00
    @CallMeReznov 是我发的时候脱敏了
    Getting
        17
    Getting  
    OP
       2022-03-21 17:20:24 +08:00
    @lcy630409 不是的 我指定了接口 不会按跃点走了吧 40 和 41 不在一个接口
    lcy630409
        18
    lcy630409  
       2022-03-21 20:59:23 +08:00
    @Getting 指定路由不会 默认路由会
    xtinput
        19
    xtinput  
       2022-03-21 21:15:10 +08:00
    0.0.0.0 表示走默认网关,数据报文要到下一跳就得路由网关包装,指定了端口,但网关 0.0.0.0 变成默认,那就是网关配置有误了,然后就跳不过去了

    多出口都是只配网关,不指定接口的吧
    Getting
        20
    Getting  
    OP
       2022-03-22 08:20:38 +08:00
    @xtinput 现在知道多出口是配网关了 那指定接口什么时候用得到呀?
    qbqbqbqb
        21
    qbqbqbqb  
       2022-03-28 16:15:37 +08:00
    @Getting

    二层网络是以太网的话,路由表项是需要同时包含“出接口”和“下一跳”(俗称“网关”)两个字段的。
    1 ) 出接口是不能不指定的,如果不填写的话系统会帮你自动推断,实际上还是相当于有指定接口;
    2 ) 下一跳不指定,代表二层直连,目标机器必须在同一个广播域(通俗地说就是通过交换机连接,或者“同网段”)内才能连接;跨网段,需要经过三层路由的,必须配置下一跳,否则肯定连不通的;
    3 ) 配置 IP 的时候填写的“子网掩码”和“默认网关”实际上就相当于一种简化的路由表配置,子网掩码自动生成相应前缀的二层直连路由;默认网关会生成一条 0 前缀的路由;和手动添加的路由属于平行关系,遵循相同的优先规则(最长匹配前缀优先,如果有前缀相同的则是 metric 值低的优先);所以不存在所谓“不写就走默认网关”的说法。

    如果是 PPP 之类的点对点网络,路由表里就只需要指定“出接口”一个字段,“下一跳”对于这类网络是没有意义的,比如说有时候你在电脑上 PPPoE 拨号也会显示一个“默认网关”但其实这个地址并没有什么实际意义。也只有在这类网络环境里才能不填或乱填“网关”。
    Getting
        22
    Getting  
    OP
       2022-03-28 17:53:59 +08:00
    @qbqbqbqb 谢谢老哥 很专业回答!!!
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1213 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 23:21 · PVG 07:21 · LAX 15:21 · JFK 18:21
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.