最终目标是同一台服务器可以多个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. Visual Studio资源汇总

    Visual Studio 2015:http://tieba.baidu.com/p/3442930798Visual Studio 2013:http://tieba.baidu.com/p/34 ...

  2. RK3288 mipi屏参数配置文件

    RK3288     Android 5.1系统     Linux 3.10 mipi屏参数配置文件所在的路径:kernel/arch/arm/boot/dts/xxx_mipi.dtsi 屏参数配 ...

  3. c/c++ 整数除预算保留小数

    两个整数相除会自动省略小数点后的小数位即使下面这种: int a,int b; int a = 4; int b = 3; double d = a/b; d= 1.0000000; -------- ...

  4. python中TCP粘包问题解决方案

    TCP协议中的粘包问题 1.粘包现象 基于TCP写一个远程cmd功能 #服务端 import socket import subprocess sever = socket.socket() seve ...

  5. 2017-11-04 Sa Oct 消参

    2017-11-04 Sa $ P(-3, 0) $ 在圆C $ (x-3)^2 + y^2 = 8^2 $ 内,动圆M与圆相切且过P点,求M点轨迹. 设切点 $ A(a, b) $,圆心 \(M(x ...

  6. 《Spring_Four》第二次作业 基于Jsoup的大学生考试信息展示系统开题报告

    一.项目概述 该项目拟采用Jsoup对大学生三大考试(考研.考公务员.考教师资格证)进行消息搜集,研发完成一款轻量级的信息展示APP,本项目主要的创新点在于可以搜集大量的考试信息,对其进行一个展示,而 ...

  7. Object.assign()解释整理

    链接:https://blog.csdn.net/wang252949/article/details/79106160 语法 Object.assign(target, ...sources) 参数 ...

  8. Ubuntu 装nexus

    装nexus前提是装好JDK和maven 先下载 wget http://download.sonatype.com/nexus/oss/nexus-2.12.0-01-bundle.tar.gz 再 ...

  9. 测试Linux下tcp最大连接数限制

    现在做服务器开发不加上高并发根本没脸出门,所以为了以后吹水被别人怼“天天提高并发,你自己实现的最高并发是多少”的时候能义正言辞的怼回去,趁着元旦在家没事决定自己写个demo搞一搞. 这个测试主要是想搞 ...

  10. 【python中二叉树的实现】python中二叉树的创建、三种方式递归遍历和非递归遍历

    代码如下: # coding=utf-8 class myNode(object): def __init__(self, data=-1, lchild=None, rchild=None): se ...