linux 双路由双网卡公私网访问环境配置
需求
之前碰到一个问题,没经历过还挺麻烦的。现在将解决方法分享出来,希望能帮助到遇到相同问题的人。
实验室有一台HP工作站的机器,有一个公网IP,导师希望布置一些网站,和同学们在任何地方都能通过公网IP连到服务器上,本来很简单的问题,但很坑爹的是通过这个公网IP不能上外网,连什么Mysql,github等都不可以(可以连,但是开通要收巨额流量费,一晚几千那种),于是有了下面的架构。
问题
需要配置访问者通过公网IP通过路由器2,网卡2进入服务器,服务器访问网络通过网卡1。
如果访问IP (如:A)固定的话有个解决方案,配置路由表,设置去往A的流量通过网卡2即可,但是访问服务器的IP不可能固定
- 访问者不一定有公网IP
- 每次访问的IP很有可能是变化的
如过配置访问者通过路由器1,网卡1进入服务器,行不通,因为路由器1不具有公网IP
结论
配置单一的路由表不能解决问题
理想的路径如下图
解决办法
配置多张路由表
网卡1为 eth1,网卡2为eth0
- 编辑 /etc/iproute2/rt_tables 增加两个public 和 private策略
其中public策略表对应网卡2(公网IP),private策略表对应网卡1(无公网IP)
下面是具体配置命令
route del -net 0.0.0.0 删除默认路由策略
route add -net 0.0.0.0 gw 192.168.80.1 增加默认路由网关 即从能访问国际网的路由器走
eth0的配置命令
ip route flush table public 清空public策略表
ip route add default via 192.168.90.1 dev eth0 table public
public策略表默认网关为外网连进来的路由器
ip rule add from 192.168.90.0/24 table public 从192.168.90.X网段来的流量都从public策略表走,即从90.1网关走
eth1的配置命令 (同上)
ip route flush table private
ip route add default via 192.168.80.1 dev eth1 table private
ip rule add from 192.168.80.0/24 table private
路由展示
默认路由
ip策略表
路由表的内容
后续问题
安装docker后,发现docker container 里不能访问互联网
解决办法
在 private路由表中添加docker路由信息
网卡配置
- centOS版(网桥版,为何是网桥版,请看
https://blog.****.net/weixin_44698082/article/details/89322728
在 /etc/sysconfig/network-scripts/下
有ifcfg-enp3s0 、 ifcfg-enp5s0 两张网卡信息,编辑如下
ifcfg-enp3s0
TYPE=Ethernet 类型 以太网
#PROXY_METHOD=none
#BROWSER_ONLY=no
#BOOTPROTO=dhcp
#DEFROUTE=yes
#NM_CONTROLLED=no
BRIDGE=br0 网桥 br0
#USERCTL=no
#IPV6INIT=yes
#IPV4_FAILURE_FATAL=no
#IPV6_AUTOCONF=yes
#IPV6_DEFROUTE=yes
#IPV6_FAILURE_FATAL=no
#IPV6_ADDR_GEN_MODE=stable-privacy
NAME=enp3s0 名称
UUID=c05227b6-aac4-462d-b83a-6157d1354410 UUID 唯一
DEVICE=enp3s0 设备
ONBOOT=yes 启动的时候启用该设置
#NETMASK=255.255.255.0
#GATEWAY=192.168.90.1
ifcfg-enp5s0 同理 网桥选择br1
创建网桥配置文件 ifcfg-br0 ifcfg-br1
ifcfg-br0
TYPE=Bridge 类型 网桥
PROXY_METHOD=none 无代理?
BROWSER_ONLY=no
BOOTPROTO=static 配置ip获取类型 这里设置为静态,也可以在路由器里设置mac绑定
DEFROUTE=yes 定义路由?
NM_CONTROLLED=no 设置不实时生效
#BRIDGE=br0
USERCTL=no
IPV6INIT=yes
IPV4_FAILURE_FATAL=no
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=br0 名称
#UUID=c05227b6-aac4-462d-b83a-6157d1354410
DEVICE=br0 设备
ONBOOT=yes 启动的时候启用该设置
IPADDR=192.168.90.2 静态IP地址
NETMASK=255.255.255.0 子网掩码
NETWORK=192.168.90.0 网段
#GATEWAY=192.168.90.1
DNS1=223.6.6.6 DNS服务器 阿里云的
DNS2=223.5.5.5
ifcfg-br1
TYPE=Bridge
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
NM_CONTROLLED=no
#BRIDGE=br0
USERCTL=no
IPV6INIT=yes
IPV4_FAILURE_FATAL=no
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=br1
#UUID=c05227b6-aac4-462d-b83a-6157d1354410
DEVICE=br1
ONBOOT=yes
IPADDR=192.168.80.3
NETMASK=255.255.255.0
NETWORK=192.168.80.0
GATEWAY=192.168.80.1
DNS1=223.6.6.6
DNS2=223.5.5.5
~
3. ubuntu版
打开ubuntu的/etc/network/interfaces
#and how to activate them. For more information, see interfaces(5).
source /etc/network/interfaces.d/*
#The loopback network interface
auto lo
iface lo inet loopback
#The primary network interface
auto eth0
iface eth0 inet dhcp //第一张网卡DHCP 但是因为MAC绑定过了,所以是静态地址
auto eth1
iface eth1 inet dhcp //第二张网卡DHCP
开机启动
将解决方法里的命令写到开机脚本 rc.local
赋予rc.local执行权限