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.186 //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.186  netmask 255.255.255.252  broadcast 121.78.159.187
        ether 00:50:56:a6:38:8c  txqueuelen 1000  (Ethernet)

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

测试公网连通性

  1. 从服务器内部测试
    1171094-20190531135253978-713294548.png

  2. 从本地测试
    1171094-20190531135308218-1516946819.png

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

当前网卡信息

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 "net.ipv4.conf.all.rp_filter = 0" > /etc/sysctl.conf
sysctl -p 

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

测试网络连通性

  1. 从服务器内部测试
    1171094-20190531135453896-1516477351.png
  2. 从本地测试
    1171094-20190531135508880-1939178830.png

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

1171094-20190531135205038-2119431674.png

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

策略路由

新增两张路由表

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

转载于:https://www.cnblogs.com/Cherry-Linux/p/10683525.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值