AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 822441
Accepted
bao7uo
bao7uo
Asked: 2016-12-24 03:55:02 +0800 CST2016-12-24 03:55:02 +0800 CST 2016-12-24 03:55:02 +0800 CST

在 linux 中添加 iptables snat 或 dnat 规则时出错

  • 772

我在 Raspberry Pi 3 上使用 Arch Linux(32 位版本)。

当我尝试向 中添加任何-j SNAT或-j DNAT规则时iptables,它不起作用 - 我收到一个错误

iptables: No change/target/match by that name

我通常对 iptables 没有问题。例如,标准INPUT,OUTPUT并且FORWARD有很多规则。此外,还POSTROUTING包含一条MASQUERADE运行良好的规则,允许内部 LAN 与 Internet 通信。

我SNAT在尝试允许互联网将流量发送到公共 IP 以到达内部网络上的机器时遇到了问题。当这不起作用时,我尝试了更简单的规则,但它们也不起作用。然后我尝试添加DNAT规则并遇到了同样的问题。

我可以将更复杂的规则添加到PREROUTINGandPOSTROUTING而无需指定-j DNATor-j SNAT然后它们将添加,并且计数器将增加。

以下是添加规则和错误-j SNAT的最简单尝试的一些示例。-j DNAT无论我尝试添加什么SNAT或规则,错误总是与下面显示的相同。DNAT

[root@hostname ~]# iptables -F PREROUTING -t nat
[root@hostname ~]# iptables -A PREROUTING -t nat -d $public_IP -j DNAT --to-destination $internal_IP
iptables: No chain/target/match by that name.

[root@hostname ~]# iptables -F POSTROUTING -t nat
[root@hostname ~]# iptables -A POSTROUTING -t nat -o teql+ -j SNAT --to-source $public_IP
iptables: No chain/target/match by that name.

Linux 详细信息和当前-t nat配置:

[root@hostname ~]# uname -a
Linux hostname.local 4.4.37-1-ARCH #1 SMP Fri Dec 9 19:03:41 MST 2016 armv7l GNU/Linux

[root@hostname ~]# iptables -nvL -t nat
Chain PREROUTING (policy ACCEPT 18 packets, 1184 bytes)
pkts bytes target     prot opt in     out     source               destination

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
600 37155 MASQUERADE  all  --  *      teql+   0.0.0.0/0            0.0.0.0/0
[root@hostname ~]#

以下是已加载内核模块的列表,如果有帮助,可能相关:

[root@hostname ~]# lsmod | grep ip
ipt_REJECT              1543  142
nf_reject_ipv4          3223  1 ipt_REJECT
ipt_MASQUERADE          1223  1
nf_nat_masquerade_ipv4  2893  1 ipt_MASQUERADE
iptable_nat             1812  1
nf_nat_ipv4             5573  1 iptable_nat
nf_nat                 15506  2 nf_nat_ipv4,nf_nat_masquerade_ipv4
nf_conntrack_ipv4      13768  7
nf_defrag_ipv4          1684  1 nf_conntrack_ipv4
nf_conntrack          101220  5 nf_nat,nf_nat_ipv4,xt_conntrack,nf_nat_masquerade_ipv4,nf_conntrack_ipv4
iptable_filter          1665  1
ip_tables              12280  2 iptable_filter,iptable_nat
x_tables               17670  5 ip_tables,ipt_MASQUERADE,xt_conntrack,iptable_filter,ipt_REJECT
ipv6                  370087  20
nat iptables linux-kernel linux-networking
  • 2 2 个回答
  • 1227 Views

2 个回答

  • Voted
  1. Best Answer
    Stuart Cardall
    2019-04-05T04:12:52+08:002019-04-05T04:12:52+08:00

    在 Archxt_nat中默认不加载。

    这是固定的:

    modprobe xt_nat
    echo "xt_nat >> /etc/modules-load.d/iptables.conf"
    
    • 1
  2. bao7uo
    2017-01-06T23:31:02+08:002017-01-06T23:31:02+08:00

    所以我最终想通了......原来xt_nat需要加载Linux内核模块。运行以下命令来加载该模块立即解决了问题。

    insmod /lib/modules/`uname -r`/kernel/net/netfilter/xt_nat.ko.gz
    

    为了弄清楚发生了什么,我决定重新启动 Pi。该xt_nat模块在启动时加载并且iptables仍然正常工作 - 允许添加规则。

    因此,尽管我不确定模块是如何卸载的(因为它应该在启动时加载),但至少它现在可以工作了。-j DNAT理论上,这个问题现在不应该再次出现,因为在or-j SNAT规则存在时无法卸载模块。

    • 0

相关问题

  • 为 Cisco ASA 5510 上的端口 443/80 创建 NAT 规则和安全策略

  • Linux 路由器上的 NAT GRE(IP 协议 47)

  • OCS 2007 R2 A/V NAT - 外部客户端尝试内部 IP

  • 为什么我无法从我的win2008 NAT 后面连接到某些ftp 服务器?

  • 隧道 Xbox 网络流量 [关闭]

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve