特别不喜欢基于Windows的工作环境,这对一个Unix/Linux程序员来说,可以说是一种信仰。要不是电子邮件客户端被牢牢绑定在可恶的Outlook 2013上(因为加密邮件要求, 想使用Thunderbird都不行),我想我坚决不会在工作中使用Windows10。 幸运的是,还有一个台式机(代号: ISX)可以用,安装的操作系统是Ubuntu14.04LTS。

1. 需求

在Ubuntu14.04LTS上既能访问外网,又能访问内网。外网用来冲浪,内网用来干活。

2. 困境

台式机ISX只有一个有线网卡,没有无线网卡。

  1. root@idorax:~# lspci | egrep Ethernet
  2. 02:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (rev 0c)

硬件条件不允许双网卡,只能自己想办法。

3. 办法

3.1 加硬件

自己花钱买一个USB网卡转换器就是了,看起来是这样子滴,

3.2 改路由

新加的USB网卡转换器连接外网,原来的有线网卡连接内网,都采用DHCP方式上网。 连接完毕后查看网络连接信息是这样的,

o eth1 <-- USB网卡转换器, 冲浪

o eth0 <-- 有线网卡, 干活

o 系统启动后的初始路由

  1. root@idorax:~# route | sed '1d'
  2. Destination Gateway Genmask Flags Metric Ref Use Iface
  3. default 10.123.255.254 0.0.0.0 UG 0 0 0 eth1
  4. 10.123.0.0 10.123.255.254 255.255.0.0 UG 0 0 0 eth0
  5. 10.123.0.0 * 255.255.0.0 U 1 0 0 eth1
  6. 10.123.255.254 * 255.255.255.255 UH 0 0 0 eth0
  7. 100.9.1.0 * 255.255.255.0 U 1 0 0 eth0

其中, eth0(连接内网)的路由设置会影响外网(eth1)的访问。

o 修改路由

  1. root@idorax:~# route add -net 100.0.0.0/8 gw 100.9.1.254 metric 20 dev eth0
  2. root@idorax:~#
  3. root@idorax:~# route del -net 10.123.0.0 netmask 255.255.0.0 gw 10.123.255.254 dev eth0
  4. root@idorax:~# route del -net 10.123.255.254 netmask 255.255.255.255 dev eth0
  5. root@idorax:~# route del -net 100.9.1.0 netmask 255.255.255.0 dev eth0

o 修改后的路由

  1. root@idorax:~# route | sed '1d'
  2. Destination Gateway Genmask Flags Metric Ref Use Iface
  3. default 10.123.255.254 0.0.0.0 UG 0 0 0 eth1
  4. 10.123.0.0 * 255.255.0.0 U 1 0 0 eth1
  5. 100.0.0.0 100.9.1.254 255.0.0.0 UG 20 0 0 eth0

到此为止, 基于Ubuntu14.04LTS的双网卡不双待的工作环境就设置好了。

  • eth0用来访问内网 (注意其Metric被设置为20), eth1用来访问外网。
  • eth0不再干扰eth1, 满足需求。

上面的手工添加/删除路由的过程可以用bash脚本实现,吼吼,再次表示不喜欢Windows, 虽然Windows也支持脚本编程。

o vroute.sh

  1. #!/bin/bash
  2.  
  3. TMPDIR=/tmp
  4. NAME=$(basename $0)
  5.  
  6. function show_route
  7. {
  8. route | tr -s ' ' ':' | sed 's/*/0.0.0.0/g' | sed '1d'
  9. }
  10.  
  11. function add_route_100_ug
  12. {
  13. typeset net=$1
  14. typeset gw=$2
  15. typeset metric=$3
  16. typeset dev=$4
  17.  
  18. typeset f_out=$TMPDIR/$NAME.out.$$
  19. show_route | egrep "UG" | egrep ":$dev$" | \
  20. awk -F':' '{print $1}' > $f_out
  21. while read line; do
  22. typeset s=$(echo $line)
  23. [[ $s == ${net%/*} ]] && return 0
  24. done < $f_out
  25.  
  26. sudo route add -net $net gw $gw metric $metric dev $dev
  27. return $?
  28. }
  29.  
  30. function del_route_10_ug
  31. {
  32. typeset net=$1
  33. typeset dev=$2
  34.  
  35. typeset f_out=$TMPDIR/$NAME.out.$$
  36. show_route | egrep "UG" | egrep ":$dev$" > $f_out
  37. typeset s=""
  38. typeset s_net=""
  39. typeset found=1
  40. while read line; do
  41. s=$(echo $line)
  42. s_net=$(echo $line | awk -F':' '{print $1}')
  43. [[ $s_net == $net ]] && found=0 && break
  44. done < $f_out
  45.  
  46. (( found != 0 )) && return 0
  47.  
  48. typeset netmask=$(echo $s | awk -F':' '{print $3}')
  49. typeset gw=$(echo $s | awk -F':' '{print $2}')
  50. sudo route del -net $net netmask $netmask gw $gw dev $dev
  51. return $?
  52. }
  53.  
  54. function del_route_10_uh
  55. {
  56. typeset dev=$1
  57. typeset s=$(show_route | egrep ":UH:" | egrep ":$dev$")
  58. [[ -z "$s" ]] && return 0
  59.  
  60. typeset net=$(echo $s | awk -F':' '{print $1}')
  61. typeset netmask=$(echo $s | awk -F':' '{print $3}')
  62. sudo route del -net $net netmask $netmask dev $dev
  63. return $?
  64. }
  65.  
  66. function del_route_10_u
  67. {
  68. typeset dev=$1
  69. typeset s=$(show_route | egrep ":U:" | egrep ":$dev$")
  70. [[ -z "$s" ]] && return 0
  71.  
  72. typeset net=$(echo $s | awk -F':' '{print $1}')
  73. typeset netmask=$(echo $s | awk -F':' '{print $3}')
  74. sudo route del -net $net netmask $netmask dev $dev
  75. return $?
  76. }
  77.  
  78. trap "rm -f $TMPDIR/$NAME.*.$$" EXIT
  79.  
  80. eth="eth0"
  81. add_route_100_ug 100.0.0.0/8 100.9.1.254 20 $eth || exit 1
  82. del_route_10_ug 10.123.0.0 $eth || exit 2
  83. del_route_10_uh $eth || exit 3
  84. del_route_10_u $eth || exit 4
  85. exit 0

结束语: 毛主席说过,“广阔天地,大有作为”, 你懂的 :-) 环境太艰苦,只能自己想办法,"艰难困苦,玉汝于成"。 如果你想了解“Win10双网卡不双待攻略”, 请狠戳这里。看完之后,你就很能理解我为什么很不喜欢Windows了。

扩展阅读:

Ubuntu双网卡不双待攻略的更多相关文章

  1. Win10双网卡不双待攻略

    声明:本文与个人的技术兴趣毫无关系,只是因为有迫不得已的实际需求,才不得不想办法.所谓"艰难困苦,玉汝于成",大概就是这个道理.(PS:标题我没有写错,不是双网卡双待,就是双网卡但 ...

  2. 双硬盘RAID 0全攻略

    . RAID53 RAID7即高效数据传送磁盘结构,是RAID3和带区结构的统一,因此它速度比较快,也有容错功能.但价格十分高,不易于实现. 为什么需要磁盘阵列        如何增加磁盘的存取(ac ...

  3. Linux 双网卡绑定

    Linux 双网卡绑定 Linux 双网卡绑定双网卡绑定的常用模式:mode1:active-backup 模式,即主备模式.mode0:round-broin 模式,即负载均衡模式(需要交换机配置聚 ...

  4. windows2003服务器双线双IP双网卡设置方法

    双线双ip很好,网通用户访问网通线路,电信用户访问电信线路.但很多人会选用导入静态路由表,这个办法看似完美,其实问题很多. 1.电信用户如果被解析到网通的ip上,服务器根据路由表会返回电信线路,但用户 ...

  5. ubuntu 双线双网卡双IP实现方式

    昨天金桥机房上架了一台多玩的测试机,系统是ubuntu9.04 X64的系统,母机IBM X336机器.用户需求是双线,故采用一个网卡配置电信地址,另一个网卡配置联通地址,安装好系统后配置好IP发现联 ...

  6. Ubuntu实现双网卡双IP双待机

    Ubuntu实现双网卡双IP双待机 待机是借用了手机中的说法,其实是电脑上有两个网卡,一个无线,一个有线的.要实现无线访问外网Google Baidu查资料,有线网卡直接连接开发板.在Ubuntu上配 ...

  7. Ubuntu 配置双网卡的问题

    一台双网卡电脑拥有两个网关是不可能的,因为默认网关(default gateway)只能是一个.给Ubuntu Linux服务器安装两块网卡,分别设置不同的ip和网关(内网和外网),外网的通过外网网卡 ...

  8. ubuntu双网卡准备配置

    近日有个需求,交换机有两台,做了堆叠,服务器双网卡,每个分别连到一台交换机上.这样就需要将服务器的网卡做成主备模式,以增加安全性,使得当其中一个交换机不通的时候网卡能够自动切换. 整体配置不难,网上也 ...

  9. ubuntu各系统双网卡绑定

    Ubuntu14.04双网卡绑定 2.1 确定网卡名称 首先确定两块网卡的名称,一般为eth0.eth1,如果有自己添加的网卡名称可能不同,在安装系统的时候可以看到,通过ipmaddr命令可以查看所有 ...

随机推荐

  1. Android-快速查找索引篇

    01.Android-UI汇总 01.Android-TextView跑马灯效果 02.Android-Activity 01.Test 03.Android-数据存储 01.Test 04.Andr ...

  2. [JAVA] Tcp客户端和服务器简单代码

    服务器: import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; im ...

  3. 【转】不用软件,解压Win8/Win8.1的install.wim文件

    今天用好压解压Windows 8.1的install.wim文件,居然提示文件损坏,换了7Z仍然如此:其实文件是好的.只不过这些软件暂时不支持罢了,还好可以用dism命令来手动完成. 一.检查镜像版本 ...

  4. [ruby]rubyGem出现ERROR: Could not find a valid gem时的处理方法

    场景: 想安装SASS的时候,打开cmd,输入gem install sass的时候却出现了: ERROR:  Could not find a valid gem 'sass' (>= 0), ...

  5. sharepoint 版本信息查看

    #检查版本:# PowerShell script to display SharePoint products from the registry. Param( # decide on wheth ...

  6. 3. Python的种类

  7. 【OCP题库】最新CUUG OCP 12c 071考试题库(66题)

    66.(22-19)choose two Examine the structure proposed for the TRANSACTIONS table: Which two statements ...

  8. json相关知识

    整理json相关知识: 1.for in 循环获取json中的键(key)与值(value) <!DOCTYPE html> <html lang="en"> ...

  9. jquery源码解析:attr,prop,attrHooks,propHooks详解

    我们先来看一下jQuery中有多少个方法是用来操作元素属性的. 首先,看一下实例方法: 然后,看下静态方法(工具方法): 静态方法是内部使用的,我们外面使用的很少,实例方法才是对外的. 接下来,我们来 ...

  10. J2SE基本安装和java的环境变量

    J2SE基本安装和java的环境变量   1. 首先登录http://www.oracle.com,下载JDK(J2SE) JDK有很多版本其中JDK 1.0,1.1,1.2,1.3,1.4 1.5 ...