最终目标是同一台服务器可以多个IP地址共同访问,在这个前提下又有如下两种方式:

  • 多个公网IP使用同一个网关
  • 多个公网IP使用不同网关

  这两种方式区别所在:1.多个公网IP使用同一个网关,我们只需要维护一张路由表,将默认路由设置成网关即可,这样所有的公网地址都会到网关地址进行转发,配置起来也比较方便。2.多个公网IP使用不同网关,因为一张路由表中默认网关只能存在一个,所以这种方式我们就需要维护多张路由表来实现,当然相对而言可能就会稍微麻烦一点,下面我们来分别实现这两种方式:

多个公网地址使用同一个网关

  这种需求我们可以用子接口的形式来实现,这种方式有一个好处就是可以节省网卡(节省VLAN),但是根据业务而言都是相对的,比如我们业务量比较大,所有公网转发都在这一块网卡,那么压力就比较大了,并且存在单点这种风险。

查看当前网卡信息

ifconfig

ens160: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
inet 1.255.30.10 netmask 255.255.255.252 broadcast 1.255.30.11
inet6 fe80::250:56ff:fea6:388c prefixlen 64 scopeid 0x20<link>
ether 00:50:56:a6:38:8c txqueuelen 1000 (Ethernet)
RX packets 187186 bytes 40500437 (38.6 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 196658 bytes 35343191 (33.7 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

  目前我们只有这一块公网网卡,这次就不将公网地址打马赛克了,因为操作完机器就删除了。

在当前网卡基础上配置子接口

vim /etc/sysconfig/network-scripts/ifcfg-ens160:1

NAME=ens160:1 //NAME需要修改
GATEWAY=1.255.30.9 //使用同一个网关地址
DNS1=210.220.163.82
DNS2=168.126.63.1
DEVICE=ens160:1 //DEVICE需要修改
ONBOOT=yes
USERCTL=no
BOOTPROTO=static
NETMASK=255.255.255.252
IPADDR=121.78.159.250 //IP地址需要修改
PEERDNS=no check_link_down() {
return 1;
}

ifconfig

ens160: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
inet 1.255.30.10 netmask 255.255.255.252 broadcast 1.255.30.11
inet6 fe80::250:56ff:fea6:388c prefixlen 64 scopeid 0x20<link>
ether 00:50:56:a6:38:8c txqueuelen 1000 (Ethernet)
RX packets 188768 bytes 40687039 (38.8 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 198348 bytes 35664829 (34.0 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 ens160:1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 121.78.159.250 netmask 255.255.255.252 broadcast 121.78.159.187
ether 00:50:56:a6:38:8c txqueuelen 1000 (Ethernet)

  子接口与主网卡使用同一MAC地址。

测试公网连通性

  1. 从服务器内部测试

  2. 从本地测试

多个公网地址使用不同网关(方法一)

当前网卡信息

ifconfig

ens160: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
inet 121.78.159.250 netmask 255.255.255.252 broadcast 121.78.159.251
inet6 fe80::250:56ff:fea6:388c prefixlen 64 scopeid 0x20<link>
ether 00:50:56:a6:38:8c txqueuelen 1000 (Ethernet)
RX packets 7273 bytes 4208431 (4.0 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 4450 bytes 541553 (528.8 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 ens192: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 1.255.30.10 netmask 255.255.255.252 broadcast 1.255.30.11
inet6 fe80::250:56ff:fea6:20d1 prefixlen 64 scopeid 0x20<link>
ether 00:50:56:a6:20:d1 txqueuelen 1000 (Ethernet)
RX packets 602 bytes 40115 (39.1 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 149 bytes 22896 (22.3 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

route -n

Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 1.255.30.9 0.0.0.0 UG 100 0 0 ens192
0.0.0.0 121.78.159.249 0.0.0.0 UG 101 0 0 ens160
1.255.30.8 0.0.0.0 255.255.255.252 U 100 0 0 ens192
121.78.159.248 0.0.0.0 255.255.255.252 U 100 0 0 ens160

  以上由多个不同优先级的默认路由来实现。

关闭反向路由检查机制

echo 0 > /proc/sys/net/ipv4/conf/all/rp_filter 
echo 0 > /proc/sys/net/ipv4/conf/ens192/rp_filter
echo 0 > /proc/sys/net/ipv4/conf/ens224/rp_filter
echo "net.ipv4.conf.all.rp_filter = 0" > /etc/sysctl.conf
sysctl -p

  为何要关闭反向路由检查机制下文将会详解,同时会给出不关闭此方式的另一种解决办法。

测试网络连通性

  1. 从服务器内部测试

  2. 从本地测试

不得不知道的Linux路由信息

  Linux中的路由由路由规则和路由表组成。路由规则制定当数据包满足规则时,应转交到具体的路由表;路由表根据数据包信息选择下一跳地址。

  • 使用ip rule查看当前路由策略:

    ip rule
0:	from all lookup local
32766: from all lookup main
32767: from all lookup default

  Linux内核最多支持32768条路由策略。main表是系统主要的路由表,所有的路由规则都写在这个表中。

  • 使用ip route list table main查看main

    ip route list table main
default via 1.255.30.9 dev ens192 proto static metric 100
default via 121.78.159.249 dev ens160 proto static metric 101
1.255.30.8/30 dev ens192 proto kernel scope link src 1.255.30.10 metric 100
121.78.159.248/30 dev ens160 proto kernel scope link src 121.78.159.250 metric 100

  从main表中能够看到当前的默认路由为121.78.159.249。Linux中支持256张路由表,编号为0~255,可以直接使用编号来进行操作,也可以使用编号别名操作,编号和别名对应关系在/etc/iproute2/rt_tables文件当中。

cat /etc/iproute2/rt_tables

#
# reserved values
#
255 local
254 main
253 default
0 unspec
#
# local
#
#1 inr.ruhep

  默认有local、main、default三个路由表,0、253、254、255三张是已经保留的不能使用。

多个公网地址使用不同网关(方法二)

  方法一中我们关闭了Linux反向路由检查机制,如果不关闭将会发生以下的现象,由于我们两块公网网卡配置了不同的默认网关,此时云主机有两个默认网关,不过优先级不同,如果不关闭反向路由检查机制的情况下,只有高优先级的网卡可以与外网互通,低优先级传输数据将会失败,具体原理如下:

  原理已经描述清楚了,这就是我们为什么要关闭反向路由检查机制的原因,如果不关闭的话可以按照策略路由的方法进行配置:

策略路由

新增两张路由表

vim /etc/iproute2/rt_tables

100 ens160
101 ens192

配置两张表的策略路由

  • 网卡ens160

    ip route flush table ens160

    ip route add default via 121.78.159.249 dev ens160 src 121.78.159.250 table ens160

    ip rule add from 121.78.159.250 table ens160
  • 网卡ens192

    ip route flush table ens192

    ip route add default via 1.255.30.9 dev ens192 src 1.255.30.10 table ens192

    ip rule add from 1.255.30.10 table ens192

CentOS配置多公网的更多相关文章

  1. Linux CentOS 配置Tomcat环境

    一.下载Tomcat 下载Tomcat方式也有两种,可以参考我的前一篇博文Linux CentOS配置JDK环境,这边就不再赘述. 二.在Linux处理Tomcat包 1.创建tomcat文件夹 mk ...

  2. CentOS 配置防火墙操作实例(启、停、开、闭端口):

    CentOS 配置防火墙操作实例(启.停.开.闭端口): 注:防火墙的基本操作命令: 查询防火墙状态: [root@localhost ~]# service   iptables status< ...

  3. CentOS配置SSH免密码登录后,仍提示输入密码

    CentOS配置SSH无密码登录需要3步: 生成公钥和私钥 导入公钥到认证文件,更改权限 测试 1.生成公钥和私钥 ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa 默 ...

  4. CentOS配置ssh无密码登录

      CentOS配置ssh无密码登录的注意点   前提配置:使用root登录修改配置文件:/etc/ssh/sshd_config,将其中三行的注释去掉,如下: 然后重启ssh服务:service s ...

  5. 在VMware中为CentOS配置静态ip并可访问网络-Windows下的VMware

    在VMware中为CentOS配置静态ip并可访问网络-Windows下的VMware 首先确保虚拟网卡(VMware Network Adapter VMnet8)是开启的,然后在windows的命 ...

  6. CentOS 配置防火墙操作实例(启、停、开、闭端口)CentOS Linux-FTP/对外开放端口(接口)TomCat相关

    链接地址:http://blog.csdn.net/jemlee2002/article/details/7042991 CentOS 配置防火墙操作实例(启.停.开.闭端口): 注:防火墙的基本操作 ...

  7. openstack私有云布署实践【4.2 上层代理haproxy+nginx配置 (办公网测试环境)】

    续上一节说明 一开始我也是使用haproxy来做的,但后来方式改了,是因为物理机controller的高配置有些浪费,我需要1组高可用的上层nginx代理服务器来实现其它域名80代理访问,很多办公网测 ...

  8. Linux工具XFTP、Xshell(centos配置java环境 工具篇 总结一)

    ♣Xmanager5是什么? ♣安装XFTP ♣安装Xshell 1.Xmanager5(官网:https://www.netsarang.com/download/software.html)是全新 ...

  9. Linux配置mysql (centos配置java环境 mysql配置篇 总结四)

    ♣安装的几种方法和比较 ♣配置yum源 ♣安装mysql ♣启动mysql ♣修改密码 ♣导入.sql文件 ♣缓存设置 ♣允许远程登录(navicat) ♣配置编码为utf8  1.关于Linux系统 ...

随机推荐

  1. 最简单的cmd命令行取得系统路径和python的安装路径(适用于winxp.win7和win10)

    @echo off::pip install seleniumpython -c"import sys;print(sys.prefix)" >temp.txtfor /f ...

  2. MATLAB——矩阵排序详解

    <span style="font-size:18px;">(1)B=sort(A) 对一维或二维数组进行升序排序,并返回排序后的数组,当A为二维时,对数组每一列进行排 ...

  3. c#操作excel方式三:使用Microsoft.Office.Interop.Excel.dll读取Excel文件

    1.引用Microsoft.Office.Interop.Excel.dll 2.引用命名空间.使用别名 using System.Reflection; using Excel = Microsof ...

  4. 将LinkedHashMap转换为需要的对象

    项目中,在获取json数据转换为list类型以后,本来以为可以直接使用,结果在使用中报错“java.lang.ClassCastException: java.util.LinkedHashMap c ...

  5. 最适合入门的Laravel中级教程(三)表单验证

    做开发有个原则是永远不能信任用户输入的数据: 即便前端已经做了验证: 在后端 php 也必须要再次验证: laravel 为表单验证提供了强大且简单的方案: 创建示例路由: routes/web.ph ...

  6. c++之&

    转自www.cnblogs.com/Mr-xu/archive/2012/08/07/2626973.html 一直以为&是取地址,也看到引用,但是今天才发现引用跟取址完全不是一个意思,&am ...

  7. SpringMVC处理XML格式的数据

    1.搭建SpringMVC+spring环境 2.web.xml,Springmvc-config.xml.springMVC提供了处理xml格式请求响应的HttpMessageConverter,s ...

  8. 《CSAPP》虚拟存储器

    虚拟存储器与物理存储器 虚拟存储器(VM)被组织为一个由存放在磁盘上的N个连续的字节大小的单元组成的数组.每一个字节都有一个唯一的虚拟地址,这个唯一的虚拟地址作为数组的索引.磁盘上的数组内容被缓存在主 ...

  9. Python基础-python基本语法(二)

    一.注释 分类:单行注释和多行注释 1.单行注释 单行注释以#开头,在当前行内,#后面的内容就是注释内容 2.多行注释 被两个   '''    或     ''''''    包括起来的内容就是注释 ...

  10. mysql数据库导入与导出

    导出 导出数据和表结构: mysqldump -u用户名 -p 数据库名 > 数据库名.sql mysqldump -uroot -p dbname > dbname .sql      ...