[转帖]CentOS 7 下用 firewall-cmd / iptables 实现 NAT 转发供内网服务器联网

centos,firewall,cmd,iptables,实现,nat,转发,内网,服务器,联网 · 浏览次数 : 0

小编点评

## Summary of the article: This article discusses using CentOS to achieve NAT (Network Address Translation) for a Keepalived server, replacing the traditional iptables firewall. **Key points:** * After setting up load balancing with HAProxy, the server no longer needs to allocate public IP addresses. * This leaves only 3 available public IP addresses for Keepalived. * Using iptables is possible but requires disabling the stock firewalld service. * The article describes configuring IPTables for NAT and allows internal connections, outbound connections for management, and DHCP for client-side devices. * The final result is a fully functional NAT setup for the Keepalived server. **Additional notes:** * The article is quite detailed and contains relevant commands for setting up IPTables and configuring the server for NAT. * It also provides troubleshooting information and tips for various scenarios. * The article mentions an alternative solution with firewall-cmd for managing the firewall, but it's not the main focus.

正文

https://www.cnblogs.com/hope250/p/8033818.html

 

自从用 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 firewalld


yum -y install iptables-services


iptables -F
iptables -t nat -F
iptables -P INPUT  DROP
iptables -P OUTPUT ACCEPT
iptables -t nat -A POSTROUTING -j MASQUERADE

iptables -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 ACCEPT


iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT

iptables-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)。

与[转帖]CentOS 7 下用 firewall-cmd / iptables 实现 NAT 转发供内网服务器联网相似的内容:

[转帖]CentOS 7 下用 firewall-cmd / iptables 实现 NAT 转发供内网服务器联网

https://www.cnblogs.com/hope250/p/8033818.html 自从用 HAProxy 对服务器做了负载均衡以后,感觉后端服务器真的没必要再配置并占用公网IP资源。而且由于托管服务器的公网 IP 资源是固定的,想上 Keepalived 的话,需要挤出来 3 个公网 I

[转帖]CentOS 7 systemd service 设置limit,不生效问题

https://www.jianshu.com/p/1d02c97f3573 问题简述:Centos7下修改系统的最大文件打开数的时候,对系统启动的进程不生效问题详述:Centos7下需修改系统最大文件打开数为100000,进程数为50000,于是做了如下操作 说 明:此问题只出现在centos7下

[转帖]CentOS救援模式下启用ssh

https://baijiahao.baidu.com/s?id=1726897688052574035&wfr=spider&for=pc CentOS Rescue 模式启用ssh远程连接 CentOS 7/8 插入系统iso镜像光盘,重启 选择 TroubleshootingRescue a

[转帖]Linux下编译安装配置python3.9

Linux版本:CentOS-7.8-x86_64-Minimal-2003 操作用户:root (1)依赖包安装: 如果是Linux的minimal系统,需要安装: yum install -y vim wget tftp lrzsz bzip2 zip unzip net-tools bind-

[转帖]远程执行Linux命令和使用for循环执行Linux命令

记录:363 场景:在CentOS 7.9操作系统上,在主机A上远程执行主机B上的Linux命令。使用for循环执行Linux命令,比如把主机A的/etc/yum.repos.d目录下文件,分发到集群其它节点。 1.使用for循环执行Linux命令 场景:把k8s-master01主机文件分发(拷贝

[转帖]操作系统性能参数调优

https://www.bookstack.cn/read/TiDB-4.0/tune-operating-system.md 本文档仅用于描述如何优化 CentOS 7 的各个子系统。 注意: CentOS 7 操作系统的默认配置适用于中等负载下运行的大多数服务。调整特定子系统的性能可能会对其他子

[转帖]The necessary bits to build these optional modules were not found: _uuid _bz2 _curse _curses_panel

在安装Python3.7可能遇到如题的错误,只需安装uuid库就可以 ubuntu下安装uuid链接库 sudo apt-get install uuid-dev CentOS yum install libuuid-devel 对于以下的问题 The necessary bits to build

[转帖]Centos8/Ubuntu 20 安装 seafile 7.1.12 专业版|企业版 脚本快速安装教程(可选择安装目录)

https://www.ittel.cn/archives/4762.html 好像没有更新了,之前介绍了安装seafile企业版7.0.14的安装教程,现在介绍下seafile企业版 7.1.12安装 教程。 目录 更新说明 : 说明下seafile企业版 7.1.12和seafile企业版 7.

[转帖]CentOS7 ab压力测试安装与解释

#背景 Apache Benchmark(简称ab) 是Apache安装包中自带的压力测试工具 ,简单易用在此提供 ab 在 centOS7 下的安装和使用方法注:个人发现,之前安装的centos6.5 默认已安装了ab,具体原因不明 ①.ab(apache benchmark)安装 命令:# yu

[转帖]arm linux下编译xtrabackup-2.4.5

环境:aarch64/centos7.6 glibc-2.17 编译器:gcc version 5.5.0 (GCC) 官方参考文档:https://www.percona.com/doc/percona-xtrabackup/2.4/installation/compiling_xtrabacku