奇淫技巧 | route命令设置网络优先级

https://blog.csdn.net/DynmicResource/article/details/120134745

1. 背景

  在生活中的会经常遇见一台PC同时连接多个网络的场景.最典型的,一台笔记本可以同时连接一个无线网(手机热点)和一个有线网(以太网).linux和window操作系统在默认情况都会使用最早连接的网络进行互联网访问.如果我们想切换到另一个网络进行互联网访问,最粗暴的方法就是断开最先连接的网络,则操作系统会自动切换到另一个网络.对于PC只有两个网络连接这个粗暴的方案的是可行的,可是如果网络连接数大于2,并且我们想切换到其中任意一个网络进行互联网访问.总不能依次断开其它所有的连接吧,未免太繁琐.

  下面我们介绍如何使用route命令来设置网络的优先级,从而使用我们想要的网络来进行互联网访问.

2. route简单介绍

  route命令用于显示和操作IP路由表。要实现两个不同的子网之间的通信,需要一台连接两个网络的路由器,或者同时位于两个网络的网关来实现。在Linux系统中,设置路由通常是为了解决以下问题:该Linux系统在一个局域网中,局域网中有一个网关,能够让机器访问Internet,那么就需要将这台机器的IP地址设置为 Linux机器的默认路由。要注意的是,直接在命令行下执行route命令来添加路由,不会永久保存,当网卡重启或者机器重启之后,该路由就失效了;要想永久保存,可以保存到配置文件。

2.1 常见命令格式

1) 添加和删除路由

    1. route {add | del } [-net|-host] [网域或主机] netmask [mask] [gw|dev]
        1. 增加 (add) 与删除 (del) 路由的相关参数:
          1. (a) -net :表示后面接的路由为一个网域。
            1. (b) -host :表示后面接的为连接到单部主机的路由。
              1. (c) netmask :与网域有关,可以设定 netmask 决定网域的大小。
                1. (d) gw gateway 的简写,后续接的是 IP 的数值,与 dev 不同。
                  1. (e) dev :如果只是要指定由那一块网路卡连线出去,则使用这个设定,后面接 eth0
                1.  

                (2) 查询路由信息

                  1. route -nee
                      1. (a) -n:不要使用通讯协定或主机名称,直接使用 IP port number
                        1. (b) -ee:使用更详细的资讯来显示。
                      1.  

                      (3) 添加/删除默认网关路由

                        1. route {add | del } default gw {IP-ADDRESS} {INTERFACE-NAME}
                            1. (a) IP-ADDRESS:用于指定路由器(网关)的IP地址。
                              1. (b) INTERFACE-NAME:用于指定接口名称,如eth0
                                    1. 1route add default gw 192.168.1.1 eth0
                                      1. 2route del default gw 192.168.1.1 eth0
                                    1.  

                                    (4) 添加/删除到指定网络的路由规则

                                      1. route {add | del } -net {NETWORK-ADDRESS} netmask {NETMASK} dev {INTERFACE-NAME}
                                          1. (a) NETWORK-ADDRESS:用于指定网络地址。
                                            1. (b) NETMASK:用于指定子网掩码。
                                              1. (c) INTERFACE-NAME:用于指定接口名称,如eth0
                                                    1. 1route add -net 192.168.1.0 netmask 255.255.255.0 dev eth0
                                                      1. 2route del -net 192.168.1.0 netmask 255.255.255.0 dev eth0
                                                    1.  

                                                    (5) 添加/删除路由到指定网络为不可达

                                                      1. 设置到指定网络为不可达,避免在连接到这个网络的地址时程序过长时间的等待,直接就知道该网络不可达。
                                                          1. route {add | del } -net {NETWORK-ADDRESS} netmask {NETMASK} reject
                                                              1. (a) NETWORK-ADDRESS:用于指定网络地址。
                                                                1. (b) NETMASK:用于指定子网掩码。
                                                                      1. 1route add -net 10.0.0.0 netmask 255.0.0.0 reject
                                                                        1. 2route del -net 10.0.0.0 netmask 255.0.0.0 reject
                                                                      1.  

                                                                      3. 使用route命令来修改默认路由的优先级

                                                                        在多个网络连接的情况下,比如以太网和WIFI同时存在的时候,路由表中就会存在多个默认网关。我们在本机上进行测试结果如下(手机热点和实验室有线网络):

                                                                      可以看到以太网enp4s0f1和WIFI网络wlp3s0的路由信息都自动生成了,而且存在两个默认网关。如果访问外网,系统会根据路由缓存信息和速度最优的原则,通过速度更快的网关进行访问。Linux系统支持对默认网关的优先级进行设置,这时需要用到mteric这个参数,metric为跃点数,当系统中有多个默认网关时,数据包会通过metric更低的接口传输。在上述截图中我们看到有线网enp4s0f1的优先级更高.下面我们就为enp4s0f1和wlp3s0设置优先级:

                                                                      上述截图的操作是依次删除两个默认路由然后再重新添加这两条默认路由,在重新添加的时候制定两条路由的metric属性.以太网enp4s0f1的metric是100不变,我们将无线网wlp3s0的metric由600改成了99.这样无线网的metric就比有线网的低,相应的优先级就比有线网的高.

                                                                      上述指令执行完毕我们就可以看到网络连接的图标由

                                                                      变成了

                                                                      这样我们就通过修改路由表中的默认网关条目实现了调整多个网络连接的优先级.

                                                                      4. 结束语

                                                                        本来是打算解决PC有多个网络连接情况下如何指定访问某个特定网站(如github)的网络连接.因为在实验室经常出现github使用手机热点的网络连接特别快,有线网则是龟速,就想着能不能只在访问github的时候使用手机热点,其它情况依旧使用有线网.

                                                                        本来以为是一个很简单的问题,可是后面调研发现并没有可行的解决方案(也许是自己没找到),时间不允许继续在这个问题上纠结,只能退而求其次解决多个网络连接的优先级切换问题.

                                                                        个人觉得多网络连接情况下指定访问某个特定网站(如github)的网络连接还是很有实际需求的,后面有时间还会继续探索这个问题.

                                                                      文章知识点与官方知识档案匹配,可进一步学习相关知识
                                                                      CS入门技能树Linux入门初识Linux30833 人正在系统学习中

                                                                      【转帖】奇淫技巧 | route命令设置网络优先级的更多相关文章

                                                                      1. Gradle更小、更快构建APP的奇淫技巧

                                                                        本文已获得原作者授权同意,翻译以及转载原文链接:Build your Android app Faster and Smaller than ever作者:Jirawatee译文链接:Gradle更小 ...

                                                                      2. 优化DP的奇淫技巧

                                                                        DP是搞OI不可不学的算法.一些丧心病狂的出题人不满足于裸的DP,一定要加上优化才能A掉. 故下面记录一些优化DP的奇淫技巧. OJ 1326 裸的状态方程很好推. f[i]=max(f[j]+sum ...

                                                                      3. ASP.NET Core 奇淫技巧之伪属性注入

                                                                        一.前言 开局先唠嗑一下,许久未曾更新博客,一直在调整自己的状态,去年是我的本命年,或许是应验了本命年的多灾多难,过得十分不顺,不论是生活上还是工作上.还好当我度过了所谓的本命年后,许多事情都在慢慢变 ...

                                                                      4. 12个实用的 Javascript 奇淫技巧

                                                                        这里分享12个实用的 Javascript 奇淫技巧.JavaScript自1995年诞生以来已过去了16个年头,如今全世界无数的网页在依靠她完成各种关键任务,JavaScript曾在Tiobe发布的 ...

                                                                      5. NGINX的奇淫技巧 —— 5. NGINX实现金盾防火墙的功能(防CC)

                                                                        NGINX的奇淫技巧 —— 5. NGINX实现金盾防火墙的功能(防CC) ARGUS 1月13日 发布 推荐 0 推荐 收藏 2 收藏,1.1k 浏览 文章整理中...... 实现思路 当服务器接收 ...

                                                                      6. NGINX的奇淫技巧 —— 3. 不同域名输出不同伺服器标识

                                                                        NGINX的奇淫技巧 —— 3. 不同域名输出不同伺服器标识 ARGUS 1月13日 发布 推荐 0 推荐 收藏 6 收藏,707 浏览 大家或许会有这种奇葩的需求...要是同一台主机上, 需要针对不 ...

                                                                      7. NGINX的奇淫技巧 —— 6. IF实现数学比较功能 (1)

                                                                        NGINX的奇淫技巧 —— 6. IF实现数学比较功能 (1) ARGUS 1月13日 发布 推荐 0 推荐 收藏 3 收藏,839 浏览 nginx的if支持=.!= 逻辑比较, 但不支持if中 & ...

                                                                      8. Zepto源码分析(二)奇淫技巧总结

                                                                        Zepto源码分析(一)核心代码分析 Zepto源码分析(二)奇淫技巧总结 目录 * 前言 * 短路操作符 * 参数重载(参数个数重载) * 参数重载(参数类型重载) * CSS操作 * 获取属性值的 ...

                                                                      9. javascript之奇淫技巧

                                                                        最近准备面试,复习一下javascript,整理了一些javascript的奇淫技巧~ //为兼容ie的模拟Object.keys() Object.showkeys = function(obj) ...

                                                                      10. BZOJ 3192: [JLOI2013]删除物品 奇淫技巧&树状数组

                                                                        点我看题 这题十分奇淫技巧...QAQ因为知道是树状数组的题QAQ刚开始以为维护两个数组的树状数组然后模拟从大到小,然后发现不会打QAQ 于是悄悄咪咪翻开题解了. 实际上两个数组可以看做一个数组 如 ...

                                                                      随机推荐

                                                                      1. Flutter Getx 状态管理 --- (依赖管理) GetxController

                                                                        Flutter Getx 简单的状态管理(依赖管理) GetxController Getx 依赖管理简介 Get有一个简单而强大的依赖管理器,它允许你只用1行代码就能检索到与你的Bloc或Contr ...

                                                                      2. Karmada 结合 coreDNS 插件实现跨集群统一域名访问

                                                                        本文分享自华为云社区<Karmada 结合 coreDNS 插件实现跨集群统一域名访问>,作者:云容器大未来 . 在多云与混合云越来越成为企业标配的今天,服务的部署和访问往往不在一个 K8 ...

                                                                      3. 技术实践丨基于MindSpore的ResNet-50蘑菇“君”的识别应用体验

                                                                        本文分享自华为云社区<基于MindSpore的ResNet-50蘑菇"君"的识别应用体验>,原文作者:Dasming. 摘要:基于华为MindSpore框架的ResNe ...

                                                                      4. Go语言微服务开发框架:Go chassis

                                                                        摘要:分布式系统中每个进程的动态配置管理及运行时热加载就成为了一个亟待解决的问题.go chassis汲取了netflix的archaius框架经验,并做出来自己的创新特性. 引言 https://g ...

                                                                      5. 十八般武艺玩转GaussDB(DWS)性能调优:Plan hint运用

                                                                        摘要:本文介绍GaussDB(DWS)另一种可以人工干预计划生成的功能--plan hint. 前言 数据库的使用者在书写SQL语句时,会根据自己已知的情况尽力写出性能很高的SQL语句.但是当需要写大 ...

                                                                      6. 小熊派:用OpenHarmory3.0点亮LED

                                                                        摘要:作为一个代表性的完整的开发,本案例可以分成3大部分:代码文件的规划,LED灯的驱动开发,点亮LED的业务开发. 本文分享自华为云社区<在小熊派Micro上用OpenHarmory3.0点亮 ...

                                                                      7. iOS代码安全加固利器:深入探讨字符串和代码混淆器的作用

                                                                        ​ 在网上搜"代码混淆"关键词,可以看到n多教程.包括本篇博客,大部分重要内容也是从网上各位大神的博客里面看到然后摘取和总结出来的.虽然网上都有,但是对于我个人来说,很难找到一篇博 ...

                                                                      8. C# 和 java 基本数据类型

                                                                        C# 和 java 基本数据类型 C#类型 java类型 描述 默认值 bool boolean 布尔值 False byte byte 8 位无符号整数 0 char char 16 位 Unico ...

                                                                      9. 鸿蒙HarmonyOS实战-ArkTS语言(基本语法)

                                                                        一.ArkTS语言基本语法 1.简介 HarmonyOS的ArkTS语言是一种基于TypeScript开发的语言,它专为HarmonyOS系统开发而设计.ArkTS语言结合了JavaScript的灵活 ...

                                                                      10. Go--日志

                                                                        一.Logger go语言默认提供的日志功能,包为ttps://golang.org/pkg/log/ 优势: 使用非常简单,可以设置任何io.Writer作为日志记录输出并向其发送要写入的日志 劣势 ...