前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Iptables NAT:实现网络中转

Iptables NAT:实现网络中转

作者头像
ppxai
发布2023-11-18 08:33:36
7060
发布2023-11-18 08:33:36
举报
文章被收录于专栏:皮皮星球皮皮星球

Iptables NAT:实现网络中转

在本文中,我们将深入解析iptables NAT(网络地址转换)的功能,以及如何使用它进行网络中转。我们会详细解释NAT中使用的PREROUTING、POSTROUTING和OUTPUT链的含义,介绍如何配置DNAT(目标网络地址转换)和SNAT(源网络地址转换),并在内网场景中演示这些概念。最后,我们将阐述如何持久化iptables配置,以保证在重启后仍然生效。

1. Iptables和NAT

iptables是Linux系统中最常用的防火墙工具之一。它通过四个不同的表来管理和处理数据包,并使用五个链来对数据包进行处理和转发:

Filter表(filter)

  • INPUT链:控制进入本机的数据包是否被接受或拒绝。
  • FORWARD链:控制通过本机的转发数据包是否被接受或拒绝。
  • OUTPUT链:控制从本机发送的数据包是否被接受或拒绝。

NAT表(nat)

  • PREROUTING链:用于在数据包进入本机之前修改目标IP地址(DNAT)或其他特征。
  • POSTROUTING链:用于在数据包离开本机之前修改源IP地址(SNAT)或其他特征。

Mangle表(mangle)

  • PREROUTING链:用于在数据包进入本机之前修改数据包的特征。
  • INPUT链:用于在数据包进入本机后修改数据包的特征。
  • FORWARD链:用于在数据包通过本机进行转发时修改数据包的特征。
  • OUTPUT链:用于在数据包从本机发送出去之前修改数据包的特征。
  • POSTROUTING链:用于在数据包离开本机之前修改数据包的特征。

Raw表(raw)

  • PREROUTING链:用于在数据包进入其他表之前进行原始处理,通常用于设置连接跟踪规则。

而NAT是iptables中的一项主要功能,主要包括源地址转换(SNAT)和目标地址转换(DNAT)。在iptables的NAT功能中,主要涉及到三个链(Chain):

  • PREROUTING链
  • POSTROUTING链。
  • FORWARD链。

2. 配置DNAT

假设我们想要将所有流向本机(公网IP)80端口的TCP流量,转发到另一台具有公网IP(8.209.1.81)的服务器的80端口。这个需求可以通过配置DNAT来实现:

代码语言:javascript
复制
iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 8.209.1.81:80

3. 配置SNAT

网络地址转换(NAT)可以将私有网络中的私有IP地址转换为公共IP地址,以此连接到互联网。这个过程中,NAT会修改数据包的源IP地址或目标IP地址。当处理出站流量时,使用源网络地址转换(SNAT)。

在处理内网环境时,我们需要SNAT使用内网IP,因为它可以让内网中的计算机通过共享的公网IP访问互联网。如果我们使用公网IP地址作为SNAT的地址,那么内网用户将无法访问SNAT提供的服务,因为他们无法直接访问公网IP地址。因此,SNAT使用内网IP地址是实现内网中转的关键。

例如,我们可以使用以下命令来实现SNAT:

代码语言:javascript
复制
iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 192.168.1.1

在这个命令中:

  • -t nat是说我们要操作的是NAT表。
  • -A POSTROUTING是向POSTROUTING链追加一条新的规则。
  • -o eth0是指定这个规则只对出口为eth0的数据包起作用。
  • -j SNAT是指定我们要执行的动作是源地址转换(SNAT)。
  • --to-source 192.168.1.1是指定新的源IP地址。

4. 启用Linux IP转发

为了让iptables能够正确地进行NAT转发,我们需要开启Linux的IP转发功能。这可以通过修改/etc/sysctl.conf文件,并添加如下行实现:

代码语言:javascript
复制
net.ipv4.ip_forward = 1

然后,运行sysctl -p命令使修改生效。

5. iptables配置的持久化

为了确保iptables的规则在重启后仍然生效,我们需要将规则持久化。这可以通过使用iptables-saveiptables-restore命令将规则保存和恢复实现。

6. 查看iptables规则

我们可以使用iptables -t nat -L -n -v命令查看nat表的规则。-L表示列出规则,-n表示以数字形式显示地址和端口,-v表示详细输出。

代码语言:javascript
复制
sudo iptables -t nat -L -n -v
Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination
    0     0 DNAT       tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:8005 to:8.209.1.81:80

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination
    0     0 SNAT       tcp  --  *      *       0.0.0.0/0            8.209.1.81           tcp dpt:8005 to:192.168.1.1

总结

以上就是iptables NAT实现网络中转的全过程详解,我们通过实际的内网场景实例,讲解了如何配置DNAT和SNAT,以及如何使配置持久化。希望这个教程能够帮助你更好地理解iptables和NAT的工作原理。如有任何问题,欢迎在评论中提出。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2023-05-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Iptables NAT:实现网络中转
    • 1. Iptables和NAT
      • Filter表(filter)
      • NAT表(nat)
      • Mangle表(mangle)
      • Raw表(raw)
    • 2. 配置DNAT
      • 3. 配置SNAT
        • 4. 启用Linux IP转发
          • 5. iptables配置的持久化
            • 6. 查看iptables规则
              • 总结
              相关产品与服务
              弹性公网 IP
              弹性公网 IP(Elastic IP,EIP)是可以独立购买和持有,且在某个地域下固定不变的公网 IP 地址,可以与 CVM、NAT 网关、弹性网卡和高可用虚拟 IP 等云资源绑定,提供访问公网和被公网访问能力;还可与云资源的生命周期解耦合,单独进行操作;同时提供多种计费模式,您可以根据业务特点灵活选择,以降低公网成本。
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档