linux网关服务器

问题

多台服务器在内网网段,其中只有一台有公网ip可以上外网,需要让所有服务器都能连接外网

解决思路

使用路由转发的方式,将拥有公网ip的服务器搭建为网关服务器,即作为统一的公网出口

所谓转发即当主机拥有多于一块的网卡时,其中一块收到数据包,根据数据包的目的ip地址将数据包发往本机另一块网卡,该网卡根据路由表继续发送数据包。这其实就是路由器通常实现的功能。

路由转发原理

 

首先内网主机向外网主机发送数据包,由于内网主机与外网主机不在同一网段,所以数据包暂时发往内网默认网关GIP处理,而本网段的主机对此数据包不做任何回应。由于内网主机的SIP是私有的,禁止在公网使用,所以必须将数据包的SIP修改成公网上的可用IP,这就是网关收到数据包之后首先要做的事情--IP地址转换,即NAT(Network Address Translation,网络地址转换)。然后网关再把数据包发往外网主机。外网主机收到数据包之后,只认为这是网关发送的请求,并不知道内网主机的存在,更不知道源IP地址是SIP而不是FIP,也没必要知道,目的主机处理完请求,把回应信息发还给网关的FIP。网关收到后,将目的主机返回的数据包的目标IP即FIP修改为发出请求的内网主机的IP地址即SIP,并根据路由表将其发给内网主机。这就是网关的第二个工作--数据包的路由转发。内网主机只要查看数据包的DIP与发送请求的SIP相同,就会回应,这就完成了一次请求。 

操作步骤

  • 服务器A

操作系统:centos7.6

外网:xxx.xxx.xxx.xxx  网卡ens192

内网:10.12.19.252  网卡ens193

  • 服务器B

操作系统:centos6.9

内网:10.12.1.2  网卡eth3

 

网关服务器A

1、启用IP路由转发功能:

vi /etc/sysctl.conf
将 net.ipv4.ip_forward=0改为net.ipv4.ip_forward=1

 [root@localhost network-scripts]# sysctl -p       //查看结果
  net.ipv4.ip_forward = 1

 

2、Centos7默认是使用firewall作为防火墙,关闭firewall,启用iptables

关闭firewall

# 查看firewall状态
$ systemctl status firewalld
# 停止firewall 
$ systemctl stop firewalld.service
# 禁止firewall开机启动 
$ systemctl disable firewalld.service

关闭selinux(因为当selinux不关闭时,iptables不读取配置文件)

# 编辑配置文件
vi /etc/selinux/config
# 增加以下配置 
SELINUX=disabled
# 保存退出
:wq!
# 使配置立即生效 
setenforce 0
# 查看当前SELinux状态
getenforce
# 临时关闭SELinux
setenforce 0
# 临时打开SELinux
setenforce 1

启用iptables

# 安装iptables 
$ yum install -y iptables-services
# 查询iptables状态
$ systemctl status iptables.service # 启动iptables防火墙 $ systemctl start iptables.service # 设置iptables防火墙为开机启动项 $ systemctl enable iptables.service # 查看iptables的策略 iptables
-L -n

3、配置iptables转发规则,保存,重启

iptables -t nat  -A POSTROUTING -s 10.12.0.0/16 -j MASQUERADE
service iptables save
systemctl restart iptables
向 NAT 表的 POSTROUTING 链条列尾添加一条规则,规则的具体内容是:
对源 IP 为10.12.0.0/16的数据包做 IP 伪装,从服务器的网卡上,自动获取当前ip地址来做NAT。
PS: MASQUERADE,即地址伪装,算是snat中的一种特例,可以实现自动化的snat。
具体参考https://blog.csdn.net/jk110333/article/details/8229828
https://blog.csdn.net/cooling88/article/details/51040054


当然也可以直接修改 vi /etc/sysconfig/iptables
vi /etc/sysconfig/iptables

-A POSTROUTING -s 10.12.0.0/16 -j MASQUERADE

 

内网服务器B

修改eth3网卡的网关为网关服务器的地址

vi /etc/sysconfig/network-scripts/ifcfg-eth3
增加:GATEWAY=10.12.19.252

重启网络服务

service network restart
ifup eth3

最后随便ping一个网址验证下,此时服务器B已经可以上外网

 

参考:https://blog.51cto.com/13683137989/1880744

https://blog.csdn.net/u013177446/article/details/53996037

posted @ 2020-05-05 18:11  酒红色  阅读(794)  评论(0编辑  收藏  举报