CentOS配置多公网
最终目标是同一台服务器可以多个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地址。
测试公网连通性
从服务器内部测试

从本地测试

多个公网地址使用不同网关(方法一)
当前网卡信息
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
为何要关闭反向路由检查机制下文将会详解,同时会给出不关闭此方式的另一种解决办法。
测试网络连通性
- 从服务器内部测试

- 从本地测试

不得不知道的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配置多公网的更多相关文章
- Linux CentOS 配置Tomcat环境
一.下载Tomcat 下载Tomcat方式也有两种,可以参考我的前一篇博文Linux CentOS配置JDK环境,这边就不再赘述. 二.在Linux处理Tomcat包 1.创建tomcat文件夹 mk ...
- CentOS 配置防火墙操作实例(启、停、开、闭端口):
CentOS 配置防火墙操作实例(启.停.开.闭端口): 注:防火墙的基本操作命令: 查询防火墙状态: [root@localhost ~]# service iptables status< ...
- CentOS配置SSH免密码登录后,仍提示输入密码
CentOS配置SSH无密码登录需要3步: 生成公钥和私钥 导入公钥到认证文件,更改权限 测试 1.生成公钥和私钥 ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa 默 ...
- CentOS配置ssh无密码登录
CentOS配置ssh无密码登录的注意点 前提配置:使用root登录修改配置文件:/etc/ssh/sshd_config,将其中三行的注释去掉,如下: 然后重启ssh服务:service s ...
- 在VMware中为CentOS配置静态ip并可访问网络-Windows下的VMware
在VMware中为CentOS配置静态ip并可访问网络-Windows下的VMware 首先确保虚拟网卡(VMware Network Adapter VMnet8)是开启的,然后在windows的命 ...
- CentOS 配置防火墙操作实例(启、停、开、闭端口)CentOS Linux-FTP/对外开放端口(接口)TomCat相关
链接地址:http://blog.csdn.net/jemlee2002/article/details/7042991 CentOS 配置防火墙操作实例(启.停.开.闭端口): 注:防火墙的基本操作 ...
- openstack私有云布署实践【4.2 上层代理haproxy+nginx配置 (办公网测试环境)】
续上一节说明 一开始我也是使用haproxy来做的,但后来方式改了,是因为物理机controller的高配置有些浪费,我需要1组高可用的上层nginx代理服务器来实现其它域名80代理访问,很多办公网测 ...
- Linux工具XFTP、Xshell(centos配置java环境 工具篇 总结一)
♣Xmanager5是什么? ♣安装XFTP ♣安装Xshell 1.Xmanager5(官网:https://www.netsarang.com/download/software.html)是全新 ...
- Linux配置mysql (centos配置java环境 mysql配置篇 总结四)
♣安装的几种方法和比较 ♣配置yum源 ♣安装mysql ♣启动mysql ♣修改密码 ♣导入.sql文件 ♣缓存设置 ♣允许远程登录(navicat) ♣配置编码为utf8 1.关于Linux系统 ...
随机推荐
- 插件: Hammer.js
官网: http://hammerjs.github.io/ hammer.js 官网 http://hammerjs.github.io/api/ 官网API(官网写的实在太简了!不好用.注意里面 ...
- mac无密登陆到linux
最近弄了台linux云服务器,然而每次登陆linux都好麻烦,所以倒腾了下ssh无密登陆. linux:centos 6.5,自带ssh mac:yosemite,自带ssh 步骤: 1. 创建key ...
- 为何要使用ViewModel
ViewModel类是用来存储和管理与UI相关的数据,在设计之初就考虑到生命周期的影响.ViewModel允许数据在屏幕旋转等配置变化后存活. Android framework管理UI控制器(如Ac ...
- Kettle安装Kafka Consumer和Kafka Producer插件
1.从github上下载kettle的kafka插件,地址如下 Kafka Consumer地址: https://github.com/RuckusWirelessIL/pentaho-kafka- ...
- java.util.Stack类中的peek()方法
java.util.stack类中常用的几个方法:isEmpty(),add(),remove(),contains()等各种方法都不难,但需要注意的是peek()这个方法. peek()查看栈顶的对 ...
- tensorflow/pytorch/mxnet的pip安装,非源代码编译,基于cuda10/cudnn7.4.1/ubuntu18.04.md
os安装 目前对tensorflow和cuda支持最好的是ubuntu的18.04 ,16.04这种lts,推荐使用18.04版本.非lts的版本一般不推荐. Windows倒是也能用来装深度GPU环 ...
- js程序的调试方法
- Ubuntu 装nexus
装nexus前提是装好JDK和maven 先下载 wget http://download.sonatype.com/nexus/oss/nexus-2.12.0-01-bundle.tar.gz 再 ...
- Python+Selenium学习--控制浏览器控制条
场景 有时候web 页面上的元素并非直接可见的,就算把浏览器最大化,我们依然需要拖动滚动条才能看到想要操作的元素,这个时候就要控制页面滚动条的拖动,但滚动条并非页面上的元素,可以借助JavaScrip ...
- linux文本格式转换
问题:在linux环境下面执行SH的可执行文件. -bash: ./start.sh: /bin/sh^M: bad interpreter: No such file or directory 解决 ...