centos 添加DNAT SNAT

本文介绍了如何在外网服务器(CentOS)上设置DNAT和SNAT,以便将对外网IP的8310端口访问转发到内网服务器的同一端口。内容包括临时和永久开启IP转发,以及通过iptables配置端口映射的详细步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

外网服务器IP 101.168.200.22 开放端口8310
内网服务器IP 192.168.55.72 开放端口8310

使访问外网101.168.200.22:8310的请求转发到内网192.168.55.72:8310

前题条件 打开服务器的端口转发
参考文章 [url=http://blog.youkuaiyun.com/michaelzhou224/article/details/16979285]sysctl命令及改变net.ipv4.ip_forward = 1方法[/url]
a临时打开
sysctl -w net.ipv4.ip_forward=1

echo 1 > /proc/sys/net/ipv4/ip_forward
b永久性打开
vi /etc/sysctl.conf
net.ipv4.ip_forward=1
sysctl -p

1、方式一
在centos服务器101.168.200.22上配置Iptable的DNAT和SNAT就可以完成转发
或者
若101.168.200.22为外网网关,在网关上配置端口映射,经过中间服务器192.168.55.1如
101.168.200.22:8310=======>192.168.55.1:8310==============>192.168.55.72:8310
则在192.168.55.1上作DNAT或SNAT,或者使用反向代理nginx


 #数据包中的目的 IP (路由器上的公网 IP) 将修改为内网 IP
# 请求路径101.168.200.22:8310============>192.168.55.72:8310
iptables -t nat -A PREROUTING -d 101.168.200.22 -p tcp --dport 8310 -j DNAT --to 192.168.55.72:8310

#SNAT:修改数据包的源ip(ip地址转换)
# 响应路径192.168.55.72:8310 ============>101.168.200.22:8310
iptables -t nat -A POSTROUTING -d 192.168.55.72 -p tcp --dport 8310 -j SNAT --to 101.168.200.22


2、方式二
101.168.200.22为网关,开放的101.168.200.22:8310端口,直接将该端口转发给192.168.55.72:8310
在101.168.200.22上配置
sysctl -w net.ipv4.ip_forward=1
iptables -I FORWARD -p tcp -j ACCEPT
iptables -I INPUT-p tcp -m state --state NEW -m tcp --dport 1521 -j ACCEPT
iptables -t nat -I PREROUTING -p tcp --dport 1521 -j DNAT --to 192.168.200.207
iptables -t nat -I POSTROUTING -p tcp --dport 1521 -j MASQUERADE
iptables -t nat -I PREROUTING -p tcp --dport 8310 -j DNAT --to 101.168.200.22
iptables -t nat -I POSTROUTING -p tcp --dport 8310 -j MASQUERADE


作成临时开放端口的脚本

#!/bin/sh

echo "please input oracle server ip"
read -p ":" ip
sysctl -w net.ipv4.ip_forward=1
iptables -I FORWARD -p tcp -j ACCEPT
iptables -I INPUT -p tcp -m state --state NEW -m tcp --dport 1521 -j ACCEPT
iptables -t nat -I PREROUTING -p tcp --dport 1521 -j DNAT --to $ip
iptables -t nat -I POSTROUTING -p tcp --dport 1521 -j MASQUERADE
echo "================================================================"
echo "connection config success"
echo "please do not config iptables before the system status recover!"
echo "waiting to recover system status"
echo "================================================================"
echo "if your connection complete please input ok"
read -p ":" ok
sysctl -w net.ipv4.ip_forward=0
service iptables reload
### 配置 SNATDNAT 的方法及示例 #### 1. 配置 SNAT SNAT 是指 **源网络地址转换**,它修改数据包的源 IP 地址。通常用于让内部网络通过 NAT 设备访问外部网络。 以下是配置 SNAT 的具体方法: - 使用 `iptables` 工具来设置规则。 - 将指定范围内的源 IP 地址替换为公共 IP 地址。 ##### 示例:将内网子网 192.168.1.0/24 转换为外部 IP 地址 203.0.113.5 ```bash iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j SNAT --to-source 203.0.113.5 ``` 这条命令的作用如下: - `-t nat`: 表明操作的是 NAT 表。 - `-A POSTROUTING`: 添加一条规则到 POSTROUTING 链中。 - `-s 192.168.1.0/24`: 指定要转换的源 IP 子网。 - `-o eth0`: 数据包从 eth0 接口发出时执行此规则。 - `-j SNAT --to-source 203.0.113.5`: 执行 SNAT 并将源地址更改为 203.0.113.5[^5]。 --- #### 2. 配置 DNAT DNAT 是指 **目标网络地址转换**,它修改数据包的目标 IP 地址。通常用于允许外部设备访问特定的服务或端口。 以下是配置 DNAT 的具体方法: - 同样使用 `iptables` 来创建规则。 - 将发往某个公共 IP 地址的数据包重定向到内部服务的实际 IP 地址和端口号。 ##### 示例:将发送至公网 IP 203.0.113.5 上的 HTTP 请求 (TCP 端口 80) 转发给内网主机 192.168.1.100 的 TCP 端口 80 ```bash iptables -t nat -A PREROUTING -d 203.0.113.5 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.100:80 ``` 这条命令的作用如下: - `-t nat`: 表明操作的是 NAT 表。 - `-A PREROUTING`: 添加一条规则到 PREROUTING 链中。 - `-d 203.0.113.5`: 指定原始目标 IP 地址。 - `-p tcp --dport 80`: 指定协议为 TCP,并匹配目标端口 80。 - `-j DNAT --to-destination 192.168.1.100:80`: 执行 DNAT 并将目标地址更改为目标主机 192.168.1.100 的端口 80[^2]。 --- #### 注意事项 - 在实际环境中,可能还需要启用 IPv4 转发功能以支持 NAT 功能。可以通过以下命令开启转发: ```bash echo 1 > /proc/sys/net/ipv4/ip_forward ``` 或者永久生效可以编辑 `/etc/sysctl.conf` 文件并添加以下内容: ```text net.ipv4.ip_forward=1 ``` 随后运行 `sysctl -p` 应用更改。 - 如果需要保存 `iptables` 规则以便重启后仍然有效,则需根据操作系统安装相应的工具(如 Red Hat/CentOS 中的 `service iptables save` 或 Ubuntu 中的 `iptables-save` 命令)[^4]。 --- ### 总结 以上展示了如何利用 `iptables` 实现 SNATDNAT 的基本配置。这些技术广泛应用于防火墙、路由器以及负载均衡器等场景下,能够显著提升网络安全性和资源利用率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值