iptables配置实现NAT(随手记)

这里写目录标题

  • iptables配置NAT
    • [0. 环境准备](#0. 环境准备)
    • [1. 防火墙配置(lb01)](#1. 防火墙配置(lb01))
    • [2. 内网服务器配置(front)](#2. 内网服务器配置(front))
    • 测试

iptables配置NAT

0. 环境准备

  • lb01: 作为防火墙,使用iptables实现nat
  • front: 作为内网应用,关闭公网网卡(ens33),使用内网网卡与lb01互通,实现经过防火墙的访问外网(ens37)

1. 防火墙配置(lb01)

shell 复制代码
# 编辑iptables
# 这条命令的作用是将所有从10.0.0.0/24网络出发的数据包的源IP地址改为192.168.100.155
iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -j SNAT --to-source 192.168.100.155



# 开启内核转发(nat必须开启,不然不会实现一台主机内的路由转发
# 永久生效
echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf
sysctl -p
  • iptables:这是用来设置、维护和检查Linux内核防火墙的命令行工具。
  • -t nat:指定要操作的是nat表。iptables有多个表,每个表包含不同的链,nat表用于处理网络地址转换。
  • -A POSTROUTING:-A表示向链中添加一条规则,POSTROUTING链在所有数据包离开本机之前应用,这是设置SNAT的理想位置。
  • -s 10.0.0.0/24:指定源地址为10.0.0.0/24网络,即所有来自这个网络的出站数据包都会受到这条规则的影响。
  • -j SNAT:-j表示跳转目标,SNAT表示执行源地址转换。
  • --to-source 192.168.100.155:指定转换后的源IP地址为192.168.100.155。这意味着所有从10.0.0.0/24网络出发的数据包,在经过NAT转换后,它们的源IP地址都会被改为192.168.100.155。

若公网ip不固定,也可使用-j MASQUERADE

iptables -t nat -A POSTROUTING -s 内网网段 -j MASQUERADE

2. 内网服务器配置(front)

shell 复制代码
# ens37(内网网卡)添加网关
[root@front01 ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens37
[root@front01 ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens37
TYPE=Ethernet
BOOTPROTO=static
NAME=ens37
DEVICE=ens37
ONBOOT=yes
IPADDR=10.0.0.148
GATEWAY=10.0.0.155 # 添加此行,指向启用NAT的服务器内网ip
NETMASK=255.255.255.0

# 关闭公网网卡
nmcli connection down ens33

#可以使用ip route或route -n查看默认路由
[root@front01 ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         10.0.0.155      0.0.0.0         UG    100    0        0 ens37
10.0.0.0        0.0.0.0         255.255.255.0   U     100    0        0 ens37

测试

  • 无nat规则

    ping不通外网

  • 有nat规则

    能ping通外网

相关推荐
TinpeaV11 分钟前
Ruoyi(若依)整合websocket实现信息推送功能(消息铃铛)
网络·websocket·网络协议
威桑12 分钟前
在 Windows 和 Linux 下使用 C/C++ 连接 MySQL 的详细指南
linux·c语言·windows
热心网友纯白12 分钟前
基于Qt的UDP主从服务器设计与实现
运维·服务器
Dontla17 分钟前
Linux系统时间不对导致mysql初始化失败:Data Dictionary initialization failed.(数据字典版本验证失败)
linux·mysql
fs哆哆22 分钟前
在VB.net中,文本插入的几个自定义函数
服务器·前端·javascript·html·.net
海奥华230 分钟前
WebSocket 协议详解
网络·websocket·网络协议
1892280486136 分钟前
美光固态硬盘NW843NW849NW859NW893NW896
服务器·科技
1892280486139 分钟前
NW896NW859美光固态闪存NW893NX764
服务器·科技
heart000_11 小时前
通义大模型在文档自动化处理中的高效部署指南(OCR集成与批量处理优化)
运维·自动化·ocr
知其然亦知其所以然2 小时前
binlog爆了,线上差点崩!一次惊心动魄的MySQL踩坑实录
运维·程序员·自动化运维