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

(2) 查询路由信息


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

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


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

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


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

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


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

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入门初识Linux30870 人正在系统学习中

【转帖】linux环境下使用route指令设置多个网络连接的优先级(通过修改路由表的默认网关条目)的更多相关文章

  1. Linux环境下Oracle安装参数设置

    前面讲了虚拟机的设置和OracleLinux的安装,接下来我们来说下Oracle安装前的准备工作.1.系统信息查看系统信息查看首先服务器ip:192.168.8.120服务器系统:Oracle Lin ...

  2. 浅谈Linux环境下Socket选项的设置

    0.前言 TCP/IP协议栈是Linux内核的重要组成部分和网络编程的基石,虽然Linux和BSD有很大的联系,但是对于某些Socket选项和内核操作仍然存在差异,因此文中适用场景均为CentOS环境 ...

  3. Linux环境下将Oracle11g数据库模式由非归档模式(Noarchivelog)修改为自动归档模式(archivelog)

    1.查看Oracle当前版本 select * from v$version 如图所示: 2.切换到Oracle用户 su - oracle 如图所示: 3.进入sqlplus(此时尚未登录oracl ...

  4. Linux环境下段错误的产生原因及调试方法小结(转)

    最近在Linux环境下做C语言项目,由于是在一个原有项目基础之上进行二次开发,而且 项目工程庞大复杂,出现了不少问题,其中遇到最多.花费时间最长的问题就是著名的“段错误”(Segmentation F ...

  5. Linux环境下段错误的产生原因及调试方法小结

    转载自http://www.cnblogs.com/panfeng412/archive/2011/11/06/2237857.html 最近在Linux环境下做C语言项目,由于是在一个原有项目基础之 ...

  6. 关于ARP攻击的原理以及在Kali Linux环境下的实现

    关于ARP攻击的原理以及在Kali Linux环境下的实现 全文摘要 本文讲述内容分为两部分,前半部分讲述ARP协议及ARP攻击原理,后半部分讲述在Kali Linux环境下如何实现ARP攻击以及AR ...

  7. 【转】【调试技巧】Linux环境下段错误的产生原因及调试方法小结

    本文转自:http://www.cnblogs.com/panfeng412/archive/2011/11/06/segmentation-fault-in-linux.html 1. 段错误是什么 ...

  8. mosquitto在Linux环境下的部署/安装/使用/测试

    mosquitto在Linux环境下的部署 看了有三四天的的源码,(当然没怎么好好看了),突然发现对mosquitto的源码有了一点点感觉,于是在第五天决定在Linux环境下部署mosquitto. ...

  9. Linux环境下安装NodeJS和mongoDB

    前面的话 本文将详细介绍如何下Linux环境下安装NodeJS和mongoDB NodeJS [1]使用二进制包安装 1.在官网下载Linux环境下的NodeJS安装包 2.通过xftp软件将安装包上 ...

  10. Linux环境下段错误的产生原因及调试方法小结【转】

    转自:http://www.cnblogs.com/panfeng412/archive/2011/11/06/2237857.html 最近在Linux环境下做C语言项目,由于是在一个原有项目基础之 ...

随机推荐

  1. gh-pages在线演示踩的坑

    git在线演示 1.新建一个gh-pages分支 2.打包好的dist上传到分支里 3.访问:https://[用户名].github.io/[项目名]/dist ( 会自动访问dist下的index ...

  2. web内容如何保护:如何有效地保护 HTML5 格式的视频内容?

    文章资料还没有整理完,现在还不通顺,但是可以做笔记看 HTML是用于创建web页面和web应用程序的公开标准的标记语言.HTML文件基本上是纯文本文件,这意味着软件应用程序和普通人可以轻松地创建.读取 ...

  3. iOS 应用上架的步骤和工具简介

    编辑 APP开发助手是一款能够辅助iOS APP上架到App Store的工具,它解决了iOS APP上架流程繁琐且耗时的问题,帮助跨平台APP开发者顺利将应用上架到苹果应用商店.最重要的是,即使没有 ...

  4. 如何删除PPT中工具栏口袋动画

    口袋动画官网无法打开 http://www.papocket.com/ 插件无法使用 卸载 在[程序和功能]中卸载后,打开PPT,菜单还是存在 选项--加载项,点击以p开头的一串代码(com加载项), ...

  5. MySQL 数据分组后取第一条数据

    SQL SERVER数据分组后取第一条数据--PARTITION BY -- 不加 distinct(a.id) order by 会有问题 导致获取出来的数据不对 SELECT id,title,d ...

  6. 【eBPF-04】进阶:BCC 框架中 BPF 映射的应用 v2.0——尾调用

    这两天有空,继续更新一篇有关 eBPF BCC 框架尾调用的内容. eBPF 技术很新,能够参考的中文资料很少,而对于 BCC 框架而言,优秀的中文介绍和教程更是凤毛麟角.我尝试去网上检索有关尾调用的 ...

  7. 【django-vue】 项目上线 uuid重复问题 内网穿透 支付宝验签 nginx集群 远程连接redis 使用uwsgi启动django

    目录 上节回顾 uuid重复问题 内网穿透 支付宝验签 今日内容 1 上线架构图 2 阿里云购买 3 安装git和其他依赖 4 云服务器安装mysql 5 云服务器安装redis(源码安装) 远程连接 ...

  8. WebRTC 的现状和未来:专访 W3C WebRTC Chair Bernard Aboba

    WebRTC 无疑推动和改变了互联网视频,而这仅仅是刚刚开始,除了大家熟悉的 WebRTC-PC.Simulcast 和 SVC,有太多的新技术和新架构出现在 WebRTC 新的标准中,比如 WebT ...

  9. CPP-移动语义

    "Move semantics allows us to optimize the copying of objects, where we no longer need the value ...

  10. Spring EL 表达式

    本篇讲述了Spring Expression Language -- 即Spring3中功能丰富强大的表达式语言,简称SpEL. SpEL是类似于OGNL和JSF EL的表达式语言,能够在运行时构建复 ...