自从用 HAProxy 对服务器做了负载均衡以后,感觉后端服务器真的没必要再配置并占用公网IP资源。
而且由于托管服务器的公网 IP 资源是固定的,想上 Keepalived 的话,需要挤出来 3 个公网 IP 使用,所以更加坚定了让负载均衡后端服务器释放公网 IP 的想法。
可是,后端服务器也不是简单释放公网 IP 就能正常工作的,正在运行的系统很多模块依然需要具有连接外网获取数据的能力。

所以就想到了用 CentOS 做一个软路由(内网 NAT 转发),如果能实现的话,就满足了我的需求。
搜索并试验了一番,目前发现用 iptables 是可行的,而且已经被我验证有效的方案。

由于用到了 iptables,需要停止并禁用内置的 firewalld 防火墙服务。

☼ 停止内置的 firewalld

systemctl stop firewalld
systemctl disable firewalld

☼ 打开系统的 IP 转发功能

echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
sysctl -p

☼ 安装 iptables 服务

yum -y install iptables-services
# 移除 iptables 服务
#yum -y remove iptables-services

☼ 查看 iptables 规则

iptables -L

☼ 清空默认的 filter 表

iptables -F

☼ 清空默认的 nat 表

iptables -t nat -F

☼ 默认规则,禁止所有入站,允许所有出站

iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT

☼ 默认规则,允许所有本地环回通信,出入站

iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

☼ 重点,开启 NAT 功能

iptables -t nat -A POSTROUTING -j MASQUERADE

☼ 完整的命令

可以在命令行下粘贴批量执行

systemctl stop firewalld
systemctl disable firewalldyum -y install iptables-servicesiptables -F
iptables -t nat -F
iptables -P INPUT  DROP
iptables -P OUTPUT ACCEPT
iptables -t nat -A POSTROUTING -j MASQUERADEiptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
iptables -A INPUT -p udp --dport 53 -j ACCEPT
iptables -A INPUT -p tcp --dport 53 -j ACCEPT
iptables -A INPUT -p tcp -s 192.168.66.0/24 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -s 你的可信任远程管理IP -j ACCEPTiptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPTiptables-save > /etc/sysconfig/iptables
systemctl restart iptables

☼ 其他

# 允许已建立的传入连接
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT# 允许DHCP传入连接
iptables -A INPUT -i eth1 -p udp --dport 67:68 -j ACCEPT# 默认禁止路由转发
iptables -P FORWARD DROP# 允许内网路由转发
iptables -A FORWARD -s 192.168.66.0/24 -j ACCEPT

☼ 后记,补充 2017-12-13 20:28

捣鼓了一下午,NAT 转发当路由器供内网服务器上网终于搞定了,结果CentOS重启后,发现 iptables 的配置丢失,竟然没有永久保存?
太扯淡!

网上说这个问题的还很多,有人说可以制作自启动脚本,在启动时自动将 iptables 的规则重新注册一次,
也算是一个解决办法。

不过,思来想起,既然 CentOS 已经抛弃了 iptables ,那肯定是有一定道理的,firewalld 一定也有办法实现同样的功能吧!


firewall-cmd --permanent --zone=public --add-masquerade# 调整防火墙策略,开放 vrrp 协议,给 Keepalived 使用
# 否则可能导致【脑裂】问题,争抢VIP,或者master挂掉之后backup无法正常工作
firewall-cmd --direct --permanent --add-rule ipv4 filter INPUT 0 --in-interface ens33 --protocol vrrp -j ACCEPT
firewall-cmd --reload
#

搞定了。

当然其他功能端口的开放,这里就不啰嗦了 (0^0)。

转载于:https://www.cnblogs.com/hope250/p/8033818.html

CentOS 7 下用 firewall-cmd / iptables 实现 NAT 转发供内网服务器联网相关推荐

  1. Centos/Red Hat6.8 安装、配置、启动Gitlab (内网环境)心得分享

    文章目录 一.Gitlab下载 1. Gitlab官网下载 二.分析思路 2.1. 分析 2.2. 代码托管平台 2.3. 镜像站 二.Gitlab 重新加载配置异常 2.1. 异常现象 2.2. 分 ...

  2. linux外网服务器跳转内网服务器实现内网访问(iptables)

    服务器信息如下 外网服务器:eth0:公网IP eth1:内网IP(192.168.10.205) 公网对外提供服务,内网IP与内部局域网通信. 配置过程: (1)开启iptables service ...

  3. Linux下实现Firewalld Net 外网端口转发至内网

    前提条件: 公网服务器至少需要2个网卡,一个配公网一个配内网. 内网服务器网卡配置同公网服务器相同内网段内网地址 如果安装过iptables的机器,需要先停止,然后设置开机禁用: servcie ip ...

  4. NAT环境下,内网用户使用公网地址访问内网服务器

    一.环境 1.单位内部有一台服务器,提供web.ftp.ssh等服务,ip地址为私网地址. 2.出口使用cisco路由器,做端口映射,使服务器对外提供服务. 3.内部用户可以通过私网地址访问服务器,外 ...

  5. iptables设置映射通过外网端口代理ssh登录内网服务器

    一.环境阐述 环境介绍:现有一台搭载数据库的内网服务器,要求是不能访问外网,需要其他可以有公网IP的服务器做端口代理,以SSH方式登录此服务器做系统管理. 环境模拟为两台VM虚拟机(搭载CentOS6 ...

  6. 控制iptables的nat转发端口的实现

    [第一.需求描述]      员工通过办公网络的网关服务器(linux)192.168.1.250的snat访问另外一个局域网:安全中心(10.1.1.0/24),但是为了提高安全性,只允许访问安全中 ...

  7. linux7防火墙端口映射,使用centos7防火墙firewall实现端口映射,实现远程内网3389桌面...

    本是为了解决linux远程连接windows桌面的问题.转来转去,搞成了端口映射和防火墙.我也不想麻烦啊.尝试了网上说的各种,rdesktop和FreeRDP(FreeRDP是开源的远程桌面系统),都 ...

  8. windows下使用nginx 端口转发 frp内网转发

    端口转发工具, win10下测试通过,用ip方式优于域名方式 https://sourceforge.net/projects/pjs-passport/ nginx下载地址 http://nginx ...

  9. CentOS 7 下的 Firewall

    CentOS 7 默认实用的用Firewalld作为防火墙,摒弃了原先的iptables.但是内核还是使用iptable作为管理 参考文档 https://access.redhat.com/docu ...

最新文章

  1. 浅谈Java语言中ArrayList和HashSet的区别
  2. [Selenium]Eclipse hangs at 57% in debug mode with TestNG tests
  3. 洛谷P3809 后缀排序【后缀数组】【模板】
  4. .NET应用如何优雅的实现功能定时开关
  5. log4net在WinForm和ASP.net下的设置
  6. 英语笔记:写作:Nothing succeeds without a strong will
  7. CCF201503-3 节日(100分)
  8. VUE---不连接后端的登录验证规则方法
  9. Rad Software Regular Expression Designer 正则表达式工具软件
  10. Atitit php pdo的api使用 目录 1.1. PHP PDO简介 1 1.2. 若要使用数据库长连接,:PDO::ATTR_PERSISTENT 1 2. 其他设置 2 2.1. )、P
  11. IDEA若依框架新建模块
  12. IDEA 插件开发 发送弹框提示信息
  13. php 去高去低去平均值,招标评分必备,去掉最高最低分求平均值
  14. Python 发送短信
  15. 购买一台计算机需要哪些配件,组装一台电脑需要哪些配件【详细列举】
  16. 毕业设计-基于机器视觉的手写字识别系统
  17. 【免费】Linux命令行与Shell脚本编程大全 第3版 PDF全本 21MB 百度网盘下载
  18. 小白学python(爬虫知识1(大体框架)
  19. 一只仓鼠引发的热议HUAWEI nova 青春版超大内存走红
  20. 台州爱乐搜5.18与您相约香溢大酒店

热门文章

  1. 递归与非递归转换(栈知识应用)
  2. 东北大学计算机分数线2017,东北大学2017年本科一批录取分数线(全国)
  3. win7查看电脑上openCV的版本
  4. android 多版本打包,Android build.gradle版本名打包配置的方法
  5. mysql和sqlserver共存_mysql 和sqlserver的 多行合并成一行
  6. php增删改查前后端分离,前后端分离之前端增删改查
  7. 多线程处理缓慢_华为昇腾,AI推理性能超越对手一倍:软件挖掘处理器全部潜力...
  8. html代码闪烁的文字怎么打,HTML最简单的文字闪烁代码
  9. linux按文件名排序ls,linux – 如何使用shell脚本按名称对文件进行排序
  10. java 非模态_Qt 之 模态、非模态、半模态窗口的介绍及 实现QDialog的exec()方法