一、环境和知识预备

  我遇到问题的生产机器是CentOS release 6.8系统,不过这并不影响问题的解决,本质上都是一样的。

  网关:一个网络连接到另一个网络的关口,也就是实现网络互连,俗称网络连接器。

  DNS:域名解析服务器,是把网址变成IP地址的服务器。

  上网流程大致如下:

    服务器IP  <-->  对应的网关  <-->  网络

  也就是说网关作为一个中介,如果没有对应的网关,那么是无法进行正确通信、上网的。

二、问题介绍

  一般我们在像运营商申请专线宽带的时候,运营商都会提供【IP、网关、掩码、DNS地址】这些基本的网卡配置信息。如果只有一张网卡,那么基本是没有问题的,这也是很常见的一个配置步骤。

  1、获取网卡名,底下表红色的就是对应的网卡名称,打马赛克的位置就是分配的公网地址(ipv4),inet表示ipv4地址,inet6表示ipv6的地址。

  

  2、切换到/etc/sysconfig/network-scripts目录下,把配置写到对应的网卡配置文件中,文件名是【ifcfg-网卡名称】,我的这边是ifcfg-em1。

  3、修改配置如下:

  1. 1 DEVICE=ens33  #网卡名称
  2. 2 HWADDR=14:18:77:3B:6F:01  #MAC地址
  3. 3 TYPE=Ethernet  #网卡类型
  4. 4 UUID=314d1b96-70b2-498a-8711-6cb5ab264464  #唯一标识
  5. 5 ONBOOT=yes      #开机激活
  6. 6 BOOTPROTO=static  #网卡获取IP地址的方式,一般有【none,dhcp,static】这些,dhcp是自动获取IP的,其他都是固定的
  7. 7 IPADDR=100.196.184.188  #IP地址,如果BOOTPROTO=dhcp选择动态获取IP的话,那么这里就不需要配置IP。
  8. 8 GATEWAY=100.196.184.19  #默认网关地址!!!
  9. 9 NETMASK=255.255.255.248  #掩码
  10. 10 DNS1=51.136.192.6    #默认主DNS地址
  11. 11 DNS2=50.196.165.2    #默认备DNS地址,后面可以继续递增列下去,DNS3,DNS4
  12. 12 NM_CONTROLLED=no  #网卡是否允许用 NetworkManager 程序管理,使用于非服务器
  13. 13 MTU=9000  #网络上传送的最大数据包

  4、单网卡情况下,你这么一配置,重启一下网络服务。【service network restart】或者【systemctl network restart】运行一下就可以了。

  因为就一张网卡,不管你配置的是全局还是局部,都能生效,没有冲突问题。

  

  如果有多张网卡,那么就会出现冲突问题了。冲突的原因是GATEWAY和DNS的配置,这两个配置的表示默认的地址。多张网卡的配置ifcfg-em1,ifcfg-em2,ifcfg-em3...,后面的配置就会把前面的配置直接进行覆盖操作。啥意思呢?就是em1的网关是A,em2的网关是B,启动的时候系统会去读取这些配置文件的信息,加载em1的配置时,默认网关是A;接着,加载em2的配置时,默认网关变成了B。这样A的IP就走不通了。

  所以在有多个网卡的情况,不应该只使用一个默认的网关来实现通信,因为不同网卡的网关不一样会导致一部分网卡由于网关不适用导致不能使用的情况。

三、问题解决

  我们可以通过为每个网卡配置单独的规则来实现通信,em1对应网关A,em2对应网关B,em3对应网关C...这样每个网卡都选择正确自己的网关,就不会有默认网关带来的冲突问题了。如何操作?请看下面:

  首先要知道Linux携带了自己的路由配置的一些命令。

  ip rule和ip route: ip rule是用来管理路由规则的,ip route是管理路由表的,底下是这两个的一些参数配置,有兴趣的可以看看,没兴趣的直接跳过下面这个代码段。

  1. Usage: ip rule [ list | add | del | flush ] SELECTOR ACTION
  2. SELECTOR := [ not ] [ from PREFIX ] [ to PREFIX ] [ tos TOS ] [ fwmark FWMARK[/MASK] ]
  3. [ dev STRING ] [ pref NUMBER ]
  4. ACTION := [ table TABLE_ID ]
  5. [ realms [SRCREALM/]DSTREALM ]
  6. [ goto NUMBER ]
  7. TABLE_ID := [ local | main | default | NUMBER ]
  8.  
  9. Usage: ip route { list | flush } SELECTOR
  10. ip route get ADDRESS [ from ADDRESS iif STRING ]
  11. [ oif STRING ] [ tos TOS ]
  12. ip route { add | del | change | append | replace | monitor } ROUTE
  13. SELECTOR := [ root PREFIX ] [ match PREFIX ] [ exact PREFIX ]
  14. [ table TABLE_ID ] [ proto RTPROTO ]
  15. [ type TYPE ] [ scope SCOPE ]
  16. ROUTE := NODE_SPEC [ INFO_SPEC ]
  17. NODE_SPEC := [ TYPE ] PREFIX [ tos TOS ]
  18. [ table TABLE_ID ] [ proto RTPROTO ]
  19. [ scope SCOPE ] [ metric METRIC ]
  20. INFO_SPEC := NH OPTIONS FLAGS [ nexthop NH ]...
  21. NH := [ via ADDRESS ] [ dev STRING ] [ weight NUMBER ] NHFLAGS
  22. OPTIONS := FLAGS [ mtu NUMBER ] [ advmss NUMBER ]
  23. [ rtt TIME ] [ rttvar TIME ] [reordering NUMBER ]
  24. [ window NUMBER] [ cwnd NUMBER ] [ initcwnd NUMBER ]
  25. [ ssthresh NUMBER ] [ realms REALM ] [ src ADDRESS ]
  26. [ rto_min TIME ] [ hoplimit NUMBER ] [ initrwnd NUMBER ]
  27. TYPE := [ unicast | local | broadcast | multicast | throw |
  28. unreachable | prohibit | blackhole | nat ]
  29. TABLE_ID := [ local | main | default | all | NUMBER ]
  30. SCOPE := [ host | link | global | NUMBER ]
  31. FLAGS := [ equalize ]
  32. MP_ALGO := { rr | drr | random | wrandom }
  33. NHFLAGS := [ onlink | pervasive ]
  34. RTPROTO := [ kernel | boot | static | NUMBER ]
  35. TIME := NUMBER[s|ms]

    1、切换到/etc/sysconfig/network-scripts目录下,把配置写到对应的网卡配置文件中,文件名是【ifcfg-网卡名称】。

    2、修改配置如下(不需要再配置GATEWAY):

    if-ens33网卡配置文件

  1. DEVICE=ens33  #网卡名称
  2. HWADDR=14:18:77:3B:6F:01  #MAC地址
  3. TYPE=Ethernet  #网卡类型
  4. UUID=314d1b96-70b2-498a-8711-6cb5ab264464  #唯一标识
  5. ONBOOT=yes      #开机激活
  6. BOOTPROTO=static  #网卡获取IP地址的方式,一般有【none,dhcp,static】这些,dhcp是自动获取IP的,其他都是固定的
  7. IPADDR=100.196.184.188  #IP地址,如果BOOTPROTO=dhcp选择动态获取IP的话,那么这里就不需要配置IP。
  8. ####GATEWAY=100.196.184.19  #默认网关地址!!!
  9. NETMASK=255.255.255.248  #掩码
  10. DNS1=51.136.192.6    #默认主DNS地址
  11. DNS2=50.196.165.2    #默认备DNS地址,后面可以继续递增列下去,DNS3,DNS4
  12. NM_CONTROLLED=no  #网卡是否允许用 NetworkManager 程序管理,使用于非服务器
  13. MTU=9000  #网络上传送的最大数据包

    if-ens34网卡配置文件

  1. DEVICE=ens33  #网卡名称
  2. HWADDR=14:18:77:3B:6F:02  #MAC地址
  3. TYPE=Ethernet  #网卡类型
  4. UUID=314d1b96-70b2-498a-8711-6cb11b264464  #唯一标识
  5. ONBOOT=yes      #开机激活
  6. BOOTPROTO=static  #网卡获取IP地址的方式,一般有【none,dhcp,static】这些,dhcp是自动获取IP的,其他都是固定的
  7. IPADDR=88.196.184.188  #IP地址,如果BOOTPROTO=dhcp选择动态获取IP的话,那么这里就不需要配置IP。
  8. ####GATEWAY=88.196.184.19  #默认网关地址!!!
  9. NETMASK=255.255.255.248  #掩码
  10. DNS1=51.136.192.6    #默认主DNS地址
  11. DNS2=50.196.165.2    #默认备DNS地址,后面可以继续递增列下去,DNS3,DNS4
  12. NM_CONTROLLED=no  #网卡是否允许用 NetworkManager 程序管理,使用于非服务器
  13. MTU=9000  #网络上传送的最大数据包

    3、配置ens33的默认路由

      【配置规则如下】:

        ip rule add from 网卡IP table 表数字
        ip route add default via 网关 dev 网卡名 table 表数字

      配置ens33的路由规则(table后面的数字可以自己取,如果冲突系统会提示已存在,换一个不存在的就好,可以通过【ip rule show】命令查看已配置的内容)

       ip rule add from 100.196.184.188 table 1

      配置ens33的路由表(可以通过【ip route show】命令查看已配置的内容)
       ip route add default via 100.196.184.19 dev ens33 table 1

    4、配置ens34的默认路由

      配置ens34的路由规则(table后面的数字可以自己取,如果冲突系统会提示已存在,换一个不存在的就好,可以通过【ip rule show】命令查看已配置的内容)

       ip rule add from 88.196.184.188 table 2

      配置ens34的路由表(可以通过【ip route show】命令查看已配置的内容)
       ip route add default via 88.196.184.19 dev ens34 table 2

    ... 如果有多张继续参照上诉步骤配置下去。

    5、通过ping命令验证

      ping -I 网卡名或者IP www.baidu.com

      如果正常的话就是成功了,否则检查一下配置。如果配置错误,可以通过对应的删除命令清理规则,就是把命令的add改成del。比如:

        ip rule add from 88.196.184.188 table 2

        对应的删除操作是:

        ip rule del from 88.196.184.188 table 2

四、总结

  这就是我今天一个解决这个问题的一个过程,就是把【网卡使用默认的网关】修改成【网卡自己使用单独的一个路由规则】来实现多IP同时上网的问题。期间,可以通过tcpdump命令,traceroute命令等来协助问题排查。这些命令比较简单就不介绍啦。tcpdump命令可以参照我之前写的:

  https://www.cnblogs.com/luozhuzhu/p/13405350.html

  好了,今日分享到此结束,咱们下期再会!谢谢大家的观看!

【Linux服务器双IP配置】如何实现不同IP的双网卡同时上网?的更多相关文章

  1. linux服务器应用NTP配置时间同步

    linux服务器应用NTP配置时间同步 • 为什么建议使用ntpd而不是ntpdate? #####原因很简单,ntpd是步进式的逐渐调整时间,而ntpdate是断点更新,比如现在服务器时间是9.18 ...

  2. linux服务器基本安全配置手册

    转:忘了在哪转的,直接复制到笔记里了,贴出来分享 假如你想要搭建一个Linux服务器,并且希望可以长期维护的话,就需要考虑安全性能与速度等众多因素.一份正确的linux基本安全配置手册就显得格外重要. ...

  3. Linux服务器的初步配置流程

    作者: 阮一峰 日期: 2014年3月14日 开发网站的时候,常常需要自己配置Linux服务器. 本文记录配置Linux服务器的初步流程,也就是系统安装完成后,下一步要做的事情.这主要是我自己的总结和 ...

  4. linux服务器ntp客户端配置【转】

    转自:https://www.cnblogs.com/kerrycode/archive/2015/08/20/4744804.html 在Linux系统中,为了避免主机时间因为在长时间运行下所导致的 ...

  5. 一台Linux服务器(4C8G配置)可以负载百万个连接?

    一台Linux服务器可以负载多少个连接? 首先我们来看如何标识一个TCP连接?系统是通过一个四元组来识别,(src_ip,src_port,dst_ip,dst_port)即源IP.源端口.目标IP. ...

  6. 拿到新linux服务器,从配置环境到跑起项目的部署流程

    今早翻开手机看到某云一条广告Linux1 核 2 GB 1 Mbps服务器10元一个月,正巧最近在搞linux,于是下单了一台2个月20. 上班来到公司后,借空闲时间一顿研究,一波骚操作配置后,浏览器 ...

  7. Linux 服务器的网络配置 - 1. 查看 Linux 服务器的网络连接

    1. 查看 Linux 服务器的网络连接 1)查看主机名: liuqian@ubuntu:~$ hostname ubuntu 2)查看 ip 地址: 用 ifconfig 即可,这里介绍命令组合用法 ...

  8. Linux服务器静态路由配置

    转载自:点击打开链接 静态路由是在路由器中设置的固定的路由表.除非网络管理员干预,否则静态路由不会发生变化.由于静态路由不能对网络的改变作出反映,一般用于网络规模不大.拓扑结构固定的网络中.静态路由的 ...

  9. Linux 服务器的网络配置 - 2. 查看 Linux 服务器的进程

    2. 查看 Linux 服务器的进程 1)ps [主要选项] -a  显示系统中所有进程的信息 -e  显示所有进程的信息 -f  显示进行的所有信息 -l   以长格式显示进程信息 -r  只显示正 ...

  10. linux服务器的SSH 配置

    远程连接服务器: 就是通过文字或图形接口的方式来远程登陆另外一台服务器系统,让你在远程的终端前面登陆linux 主机以取得可操作主机的接口 主要的远程连接服务器的主要类型: 1)文字接口明文传输 : ...

随机推荐

  1. Padavan安装使用ZeroTier实现组建虚拟局域网的方法

    首先到这个网站ZeroTier – Global Area Networking注册登陆,注册及创建网络的过程可以参考网上及其他UP主的教程,我就不重复了. 本篇主要讲述的是hiboy大佬编译的固件在 ...

  2. Java抽象类、继承及多态和适配器的实现

    Java继承 方法重写是Java语言多态的特性,必须满足以下条件 在子类中,方法名称与父类方法名称完全相同 方法的参数个数和类型完全相同,返回类型完全相同 方法的访问修饰符访问级别不低于父类同名方法的 ...

  3. 【NX二次开发】设置了“附加包含目录”,还是提示“无法打开包括文件”的解决方法

    项目属性中的"附加包含目录"路径完全正确,但是还是无法找到头文件: 这个问题我遇到过不止一次,纠结了很久,终于发现了解决方法: 改为: 问题解决! 分析原因:项目中的属性配置 与 ...

  4. go语言的排序和搜索(转载)

    http://studygolang.com/articles/1598 go语言的排序和搜索 晚上准备动手写点 go 的程序的时候,想起 go 如何排序的问题.排序 sort 是个基本的操作,当然搜 ...

  5. 教你用python搭建一个「生活常识解答」机器人

    今天教大家如何用Python爬虫去搭建一个「生活常识解答」机器人. 思路:这个机器人主要是依托于"阿里达摩院发布的语言模型PLUG",通过爬虫的方式,发送post请求(提问),然后 ...

  6. Springboot WebFlux集成Spring Security实现JWT认证

    我最新最全的文章都在南瓜慢说 www.pkslow.com,欢迎大家来喝茶! 1 简介 在之前的文章<Springboot集成Spring Security实现JWT认证>讲解了如何在传统 ...

  7. mycat高可用-安全管理-监控 看这一篇就够了

    ​ 在之前的操作中,我们已经实现了mysql机器的高可用,可以动态切换master,那么如果mycat崩溃了呢?我们应该如何处理呢?所以此时就需要搭建mycat的高可用集群了. ​ 在mycat的权威 ...

  8. ceph-csi源码分析(7)-rbd driver-IdentityServer分析

    更多 ceph-csi 其他源码分析,请查看下面这篇博文:kubernetes ceph-csi分析目录导航 ceph-csi源码分析(7)-rbd driver-IdentityServer分析 当 ...

  9. SQL 小知识笔记

    1.自动生成序列号 select row_number() over(order by field1) as row_number,* from t_table

  10. keycloak~OIDC&OAuth2&自定义皮肤

    1 OpenID & OAuth2 & SAML 1.1 相关资料 https://github.com/keycloak/keycloak https://www.keycloak. ...