返回介绍

最佳实践 83:网络地址转换在实践中的案例

发布于 2025-04-20 17:44:51 字数 1769 浏览 0 评论 0 收藏

在实践中,iptables 除了可用于网络安全之外,还经常用于网络地址转换(NAT)的环境中。网络地址转换分为源地址转换(源地址 NAT)和目的地址转换(目的地址 NAT)。

源地址 NAT

源地址 NAT,主要用于图 16-12 所示的网络示意图中无外网 IP 的服务器(Server B)需要访问互联网的场景下。

在图 16-12 中,Server B 没有外网 IP,如其需要访问互联网,则需要进行以下设置。

图 16-12 网络地址转换的网络示意图

(1)在服务器 Server B 上,指定其网络的默认网关是 10.128.70.112(即 Server A 的内网地址)。

(2)在服务器 Server A 上,启用路由功能。启用的方法是执行以下命令:

sysctl -w net.ipv4.ip_forward=1

(3)在 Server A 上,设置 iptables 规则如下:

iptables -t filter -A FORWARD -j ACCEPT
iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to x.y.z.173 #eth0 是 Server A 的外网网卡,x.y.z.173 是 Server A 的外网 IP

经过以上 3 步骤设置后,Server B 将会通过 Server A 访问互联网。此时,在互联网上看到的源地址是 Server A 的外网 IP。

以 Server B 访问 8.8.8.8 的 DNS 服务为例的数据流程如下。

(1)在 Server B 上,网络层数据包格式为:目的地址 IP 8.8.8.8,源地址 IP10.128.70.111。

(2)在 Server A 上经过源地址 NAT 后的网络层数据包格式为:目的地址 IP 8.8.8.8,源地址 IP x.y.z.173。该转换条目被记录在/proc/net/nf_conntrack 中。

(3)8.8.8.8 的响应(源地址 IP 8.8.8.8,目的地址 IP x.y.z.173)到达 Server A 后,Server A 改写网络层数据包为源地址 IP 8.8.8.8,目的地址 IP 10.128.70.111。

这就是源地址 NAT 的工作过程。

目的地址 NAT

目的地址 NAT 用于如图 16-12 所示的网络示意图中,外部用户直接访问无外网 IP 的服务器(Server B)提供的服务时。例如,外部用户希望通过互联网访问到 Server B 上的 Oracle 数据库(监听端口是 TCP 1521)时,可以使用如下的命令在 Server A 上进行目的地址 NAT 设置:

iptables -t nat -A PREROUTING -d x.y.z.173 -p tcp -m tcp --dport 1521 -j DNAT --to-destination 10.128.70.111:1521 #改写目的地址为 10.128.70.111,目的端口为 1521
iptables -t nat -A POSTROUTING -d 10.128.70.111 -p tcp -m tcp --dport 1521 -j SNAT --to-source 10.128.70.112 #改写源地址 IP 为 Server A 的内网 IP,此时在 Server B 上相对于是和 Server A 在进行通信

网络地址转换是运维人员在工作中经常用到的技术,需要非常熟悉源地址转换和目的地址转换这 2 种方案。

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。