问题

多台服务器在内网网段,其中只有一台有公网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路由转发功能:

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

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

  1.  

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

关闭firewall

  1. # 查看firewall状态
  2. $ systemctl status firewalld
  3. # 停止firewall
  4. $ systemctl stop firewalld.service
  5. # 禁止firewall开机启动
  6. $ systemctl disable firewalld.service

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

  1. # 编辑配置文件
  2. vi /etc/selinux/config
  3. # 增加以下配置
  4. SELINUX=disabled
  5. # 保存退出
  6. :wq!
  7. # 使配置立即生效
  8. setenforce 0
  9. # 查看当前SELinux状态
  10. getenforce
  11. # 临时关闭SELinux
  12. setenforce 0
  13. # 临时打开SELinux
  14. setenforce 1

启用iptables

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

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

  1. iptables -t nat -A POSTROUTING -s 10.12.0.0/16 -j MASQUERADE
  2. service iptables save
  3. systemctl restart iptables
  1. 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
  1. vi /etc/sysconfig/iptables
  2.  
  3. -A POSTROUTING -s 10.12.0.0/16 -j MASQUERADE

内网服务器B

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

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

重启网络服务

  1. service network restart
    ifup eth3

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

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

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

linux网关服务器的更多相关文章

  1. 干货|Linux平台搭建网关服务器

    概述 集群中一共10台服务器组成了局域网环境,但其中只有一台有外网网卡可以访问互联网.现要求另外9台服务器通过这台主机进行互联网访问.  实验环境介绍 利用iptables搭建网关服务器,即通过SNA ...

  2. linux+iptables搭建网关服务器

    公司购买的一批云服务器只带内网,配置了一个负载均衡器(lb),这批服务器通过lb可以对外提供服务,但是这批服务器不能主动连接外网,例如使用wget下载文件,或者curl访问ttlsa.com站点. 额 ...

  3. Linux生产服务器Shell脚本分享

    Linux生产服务器Shell脚本分享 2012-6-6 86市场网 linux 作为一名Linux/unix系统管理员,我经常遇到人问这个问题:shell能做什么?PHP这么强大,为什么不用PHP来 ...

  4. Linux 高性能服务器编程——IP协议详解

    1 IP服务特点 IP协议是TCP/IP协议族的动力,它为上层协议提供无状态.无连接.不可靠的服务. 无状态:IP通信双方不同步传输数据的状态信息,因此IP数据包的发送.传输和接收都是无序的.     ...

  5. CentOS 7配置成网关服务器

    其实在Linux下配置网关服务器很简单,如果配置好之后出现无法访问外网的情况,那么可以排查以下情况: 1.防火墙和iptables的服务关掉(firewalld.iptables) 2.清空iptab ...

  6. Windows上管理远程Linux VPS/服务器文件工具 - winscp

    Linux上经常会经常需要编辑文件,特别是Linux VPS/服务器安装好系统之后配置环境会需要修改很多的配置文件等,对于常用Linux的基本上都能够熟练使用vi或者nano等SSH下面的文件编辑工具 ...

  7. Linux邮件服务器架构

    // 上面的过程只是实现了简单的本地用户的文件发送功能,只需要安装mailutil,不需要安装配置sendmail,看鸟哥的Linux私房菜中写的应该是本地用户发送邮件不需要sendmail.只有当非 ...

  8. Go 语言开发的基于 Linux 虚拟服务器的负载平衡平台 Seesaw

    负载均衡系统 Seesaw Seesaw是由我们网络可靠性工程师用 Go 语言开发的基于 Linux 虚拟服务器的负载平衡平台,就像所有好的项目一样,这个项目也是为了解决实际问题而产生的. Seesa ...

  9. linux web服务器静态资源的处理 unison+inotify双向同步

    linux web服务器静态资源的处理 unison+inotify双向同步 http://monkeyzhu.blog.51cto.com/5764358/1324391 简介 unison可以使两 ...

随机推荐

  1. js实现刮刮卡抽奖

    刮刮卡抽奖是前端活动页常见的功能: 链接:图像擦除插件(下载及教程讲解)    推荐理由:无缝刮痕,兼容性好,上手简单   插件有些要修改的地方,打开图像擦除插件后可以看下方网友讨论,或者直接下载本博 ...

  2. 【Scrapy笔记】使用方法

    安装: 1.pip install wheel 安装wheel 2.安装Twisted a.访问 http://www.lfd.uci.edu/~gohlke/pythonlibs/#twisted ...

  3. Git的使用上传与下载github

    下载git 下载git工具是第一步 Git的使用上传与下载 创建本地仓库 在选择的文件夹中鼠标右键打开git Bash here ,在命令行输入git init创建该文件夹的本地仓库 将文件夹文件提交 ...

  4. python初学者-从键盘输入两个数判断大小

    a = int(input("a:")) b = int(input("b:")) if a > b : print(a) else : print(b)

  5. Kibana查询语言(KQL)

    一.前言 现在大多数的公司都会使用ELK组合来对日志数据的收集.存储和提供查询服务,这里就不介绍什么是ELK了,只介绍一些EKL中的查询,也就是K(kibana). 查询数据库,如果是MySQL,那么 ...

  6. 个人MySQL的事务特性原理学习笔记总结

    目录 个人MySQL的事务特性原理笔记总结 一.基础概念 2. 事务控制语句 3. 事务特性 二.原子性 1. 原子性定义 2. 实现 三.持久性 1. 定义 2. 实现 3. redo log存在的 ...

  7. CentOS7下常用安装软件服务rpm方式的介绍

    简介:介绍rpm软件包的管理 rpm安装:安装别人编译好的软件包,rpm即Redhat Package Manager,是Redhat的软件包管理方式   rpm安装优点: 软件已经编译打包,所以传输 ...

  8. 利用MD5进行加密

    package com.cn.peitest; import java.io.UnsupportedEncodingException; import java.security.MessageDig ...

  9. SpringBoot文件上传配置

    /** * 文件上传配置 * @return */ @Bean public MultipartConfigElement multipartConfigElement() { MultipartCo ...

  10. Mapreduce实例--求平均值

    求平均数是MapReduce比较常见的算法,求平均数的算法也比较简单,一种思路是Map端读取数据,在数据输入到Reduce之前先经过shuffle,将map函数输出的key值相同的所有的value值形 ...