CentOS配置多公网
最终目标是同一台服务器可以多个IP地址共同访问,在这个前提下又有如下两种方式:
- 多个公网IP使用同一个网关
- 多个公网IP使用不同网关
这两种方式区别所在:1.多个公网IP使用同一个网关,我们只需要维护一张路由表,将默认路由设置成网关即可,这样所有的公网地址都会到网关地址进行转发,配置起来也比较方便。2.多个公网IP使用不同网关,因为一张路由表中默认网关只能存在一个,所以这种方式我们就需要维护多张路由表来实现,当然相对而言可能就会稍微麻烦一点,下面我们来分别实现这两种方式:
SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。多个公网地址使用同一个网关
这种需求我们可以用子接口的形式来实现,这种方式有一个好处就是可以节省网卡(节省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地址。
测试公网连通性
多个公网地址使用不同网关
当前网卡信息
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
以上由多个不同优先级的默认路由来实现。
测试网络连通性
不得不知道的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三张是已经保留的不能使用。
