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
    • 最新
    • 标签
主页 / unix / 问题

问题[nat](unix)

Martin Hope
Synthetic Ascension
Asked: 2023-09-30 18:51:51 +0800 CST

nftables dnat 映射规则默默失败

  • 6

我正在根据这个问题的答案进行工作,man nft以便dnat在我的配置中创建一些规则nftables。

相关配置摘录为:

define src_ip       = 192.168.1.128/26
define dst_ip       = 192.168.1.1
define docker_dns   = 172.20.10.5

table inet nat {
    map dns_nat {
        type ipv4_addr . ipv4_addr . ip_proto . inet_service : ipv4_addr . inet_service
        flags interval
        elements = {
            $src_ip . $dst_ip . udp . 53 : $docker_dns . 5353,
        }
    }
    chain prerouting {
        type nat hook prerouting priority -100; policy accept;
        
        dnat to ip saddr . ip daddr . ip protocol . th dport map @dns_nat;
    }
}

当我应用此规则时nft -f,我没有看到任何命令输出,因此我认为它已成功。但是,当我使用规则检查规则集时,nft list ruleset这些规则不存在。当该dnat to ...行被注释掉时,规则似乎被应用,但是当该行存在时,规则不被应用。

prerouting我试图替换的链中的规则集合是:

ip saddr $src_ip ip daddr $dst_ip udp dport 53 dnat to $docker_dns:5353;
...

版本信息:

# nft -v
nftables v1.0.6 (Lester Gooch #5)
# uname -r
6.1.0-11-amd64

为什么这可能不起作用?谢谢

nat
  • 1 个回答
  • 16 Views
Martin Hope
tobi_b
Asked: 2023-05-08 18:45:38 +0800 CST

Nftables:具有源地址限制和只有一张地图的 Dnat

  • 6

我们的路由器机器在其 WAN 接口上有多个公共 IP (/27)。现在,我想添加匹配特定dport/ saddr/daddr组合的 dnat 规则。我的梦想是这样的:

map one2one_dnat {
    # dst_addr     . src_addr  . proto      . dst_port     : dnat_to   . dnat_to_port
    type ipv4_addr . ipv4_addr . inet_proto . inet_service : ipv4_addr . inet_service
    flags interval
    counter
    comment "1-1 dnat"
    elements = {
        42.42.42.5 . 0.0.0.0/0 . tcp . 8888 : 10.42.42.5 . 8888
    }
}

# And then later in a chain
ip daddr . ip saddr . ip protocol . th dport dnat to @one2one_dnat

但是,这会导致:

root@XXX# nft -c -f assembled.nft
assembled.nft:252:59-60: Error: syntax error, unexpected to, expecting newline or semicolon
        ip daddr . ip saddr . ip protocol . th dport dnat to @one2one_dnat
                                                          ^^

以下语法示例确实有效(但不适用于预期的精美多合一地图):

dnat ip addr . port to ip saddr . tcp dport map { 42.42.42.5 . 8888 : 10.42.42.5 . 8888}

# And even with saddr restrictions
ip saddr 0.0.0.0/0 dnat ip addr . port to ip saddr . tcp dport map { 42.42.42.5 . 8888 : 10.42.42.5 . 8888}

非常感谢任何想法/建议

nat
  • 1 个回答
  • 23 Views
Martin Hope
Sam Sirry
Asked: 2022-02-14 00:08:37 +0800 CST

如何将 DNAT 限制为仅一个公共 IP?

  • 0

在单个网络接口上具有多个公共 IP的管理程序上,有两组虚拟机。

  • A 组成员通过主机接口(通过设置路由的网桥)直接将其公共 IP 路由给他们。[1]
  • B 组成员位于具有 NAT 配置的网桥上,因此他们获得私有 IP,并且他们的连接通过一个特定的公共 IP 进行 NAT。我们称之为共享地址IPb。[2]

对于IPb某些端口上的传入连接,将转发给某些 B 组成员。我遇到的问题是 DNAT(端口转发)规则不仅适用于传入的数据包IPb,而且来自任何其他公共 IP。

如何将 DNAT 规则限制为特定于仅定向到的数据包IPb?

我尝试-dst IPb了PREROUTING规则,但这实际上导致规则根本没有被触发(端口转发停止)。[3]

谢谢

[1]
auto eth0
iface eth0 inet static
        address <eth0-main-ip>/32
        gateway <gateway-ip>
        pointopoint <gateway-ip>

#GroupA Bridge:
auto vmbr12
iface vmbr12 inet static
        address <eth0-main-ip>/32
        bridge-ports none
        bridge-stp off
        bridge-fd 0
        up   ip route add <Public-IPa>/32 via <eth0-main-ip> dev vmbr12
        down ip route del <Public-IPa>/32 via <eth0-main-ip> dev vmbr12
        .
        .
        .
[2]
#GroupB Bridge:
auto vmbr4
iface vmbr4 inet static
        address 10.0.0.1/16
        bridge-ports none
        bridge-stp off
        bridge-fd 0
        post-up echo 1 > /proc/sys/net/ipv4/ip_forward

        post-up iptables -t nat -A POSTROUTING -s '10.0.0.0/16' -o eth0 -j MASQUERADE
        post-up iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 22 -j DNAT --to 10.0.101.1:22
        post-up iptables -A FORWARD -p tcp -d 10.0.101.1 --dport 22 -j ACCEPT

        post-down iptables -t nat -D POSTROUTING -s '10.0.0.0/16' -o eth0 -j MASQUERADE
        post-down iptables -D PREROUTING -t nat -i eth0 -p tcp --dport 22 -j DNAT --to 10.0.101.1:22
        post-down iptables -D FORWARD -p tcp -d 10.0.101.1 --dport 22 -j ACCEPT

        .
        .
        .
[3]
#Using IPb in PREROUTING rule
<snip>
        post-up iptables -t nat -A POSTROUTING -s '10.0.0.0/16' -o eth0 -j MASQUERADE
        post-up iptables -A PREROUTING -t nat -i eth0 -p tcp -dst IPb --dport 22 -j DNAT --to 10.0.101.1:22
        post-up iptables -A FORWARD -p tcp -d 10.0.101.1 --dport 22 -j ACCEPT
        post-down iptables -t nat -D POSTROUTING -s '10.0.0.0/16' -o eth0 -j MASQUERADE
        post-down iptables -D PREROUTING -t nat -i eth0 -p tcp -dst IPb --dport 22 -j DNAT --to 10.0.101.1:22
        post-down iptables -D FORWARD -p tcp -d 10.0.101.1 --dport 22 -j ACCEPT
</snip>
iptables nat
  • 1 个回答
  • 46 Views
Martin Hope
smhrambo
Asked: 2021-09-28 10:21:03 +0800 CST

nftables 表和链优先级

  • 1

我的 nftables 设置有问题。

我有两张桌子,每一张都有一个带有相同钩子但名称和优先级不同的链。

这些表位于由包含参数加载的不同文件中。

由于优先级,我认为 VPN-POSTROUTING 链将在 INTERNET 链之前执行。但在我的设置中,首先执行 INTERNET 链。

table ip nat {
        chain INTERNET {
                type nat hook postrouting priority srcnat + 1; policy accept;
                oifname br2 masquerade
        }
}
table ip vpn {
        chain VPN-POSTROUTING {
                type nat hook postrouting priority srcnat - 1; policy accept;
                oifname br2 ip saddr 10.0.0.0/24 ip daddr 192.168.0.0/24 accept
        }
}

我的错误在哪里?

编辑:我更改了规则并将所有链添加到同一个表中,结果相同。

在下一步中,我按照 AB 的建议将计数器和日志添加到规则中。

链的顺序与优先级相对应,但不会触发 VPN 的接受规则。

当我将 VPN 接受规则添加到 INTERNET 链中时,就在伪装规则之前,它按预期工作。

firewall nat
  • 1 个回答
  • 492 Views
Martin Hope
Martin
Asked: 2020-02-14 08:55:11 +0800 CST

在 NAT 网关中配置 SNAT 源地址有什么意义吗?

  • 1

假设一个具有以下网络拓扑: NAT 网关网络设置

NAT 网关linux-router具有以下 SNAT 规则:

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination         
SNAT       all  --  10.99.99.50          anywhere             to:1.1.1.6

此外,如图所示,1.1.1.6地址是在lo接口上配置的。从技术上讲,这不是必需的,即可以删除它并且linux-svr仍然具有连接性。那么,是否有必要在 NAT 网关中配置 SNAT 源地址?1.1.1.6仅用于故障排除目的,因为它更容易关联和追溯linux-svr?

iptables nat
  • 1 个回答
  • 2061 Views
Martin Hope
Dave M.
Asked: 2019-12-04 14:42:28 +0800 CST

使用 nftables 进行端口转发和 NAT

  • 5

我有一个 OpenWRT 网关(自建 19.07,内核 4.14.156),它位于我的专用网络前面的公共 IP 地址上。我正在使用 nftables(不是iptables)。

我想在公共地址上公开一个非标准端口,并将其转发到网关后面机器上的标准端口。我认为这曾经被称为端口转发:看起来您的网关机器正在提供例如 http 服务,但它实际上是网关后面的私有地址上的机器。

这是我的 nftables 配置。出于这些目的,我的“标准服务”在端口 1234 上,我希望允许公众在 gateway:4321 上访问它。

#!/usr/sbin/nft -ef
# 
# nftables configuration for my gateway
#

flush ruleset

table raw {
        chain prerouting {
                type filter hook prerouting priority -300;
                tcp dport 4321 tcp dport set 1234 log prefix "raw " notrack;
        }
}

table ip filter {
        chain output {
                type filter hook output priority 100; policy accept;
                tcp dport { 1234, 4321 } log prefix "output ";
        }

        chain input {
                type filter hook input priority 0; policy accept;
                tcp dport { 1234, 4321 } log prefix "input " accept;
        }

        chain forward {
                type filter hook forward priority 0; policy accept;
                tcp dport { 1234, 4321 } log prefix "forward " accept;
        }
}

table ip nat {
        chain prerouting {
                type nat hook prerouting priority 0; policy accept;
                tcp dport { 1234, 4321 } log prefix "nat-pre " dnat 172.23.32.200;
        }

        chain postrouting {
                type nat hook postrouting priority 100; policy accept;
                tcp dport { 1234, 4321 } log prefix "nat-post ";
                oifname "eth0" masquerade;
        }
}

使用此设置,外部机器可以访问位于 的私有机器gateway:1234。日志显示nat-pre从外部到网关 IP 的 SYN 数据包,然后forward从外部到内部 IP,然后nat-post从外部到内部,“现有连接”处理其余数据包。

连接到gateway:4321log as的外部机器raw,其中 4321 更改为 1234。然后 SYN 数据包被转发到内部服务器,回复 SYN 数据包回来,然后......什么都没有!

我认为,问题在于我没有进行 nftables 配置,该配置会改变远程机器所期望的internal:1234back 。gateway:4321即使masquerade更改internal:1234为gateway:1234,远程机器也不会期待,并且可能会转储它。

这个配置有什么想法吗?

firewall nat
  • 1 个回答
  • 7751 Views
Martin Hope
Jake
Asked: 2019-03-26 11:54:14 +0800 CST

使用 iptables 和 DNAT 更改目标 IP 地址

  • 0

我正在尝试在 PREROUTING 中使用 DNAT。我在这里找到了一个教程。它包含以下句子:

这是在 PREROUTING 链中完成的,就像数据包进来一样;这意味着 Linux 机器本身上的任何其他东西(路由、数据包过滤)都会看到数据包到达它的“真实”目的地。

我想问作者最后一部分是什么意思anything else on the Linux box itself will see the packet going to its 'real' destination?

我尝试了一个测试,其中我有一个虚拟设备(tap)并将传入的 ICMP 数据包重定向到该 tap 设备(我的 tap 设备地址是10.0.4.1/24并且有一个程序正在侦听 tap 设备,所以它的状态是 UP):

# iptables -t nat -A PREROUTING -i eth0 -p icmp -j DNAT --to-destination 10.0.4.2

当我 ping 一个外部 IP 时,这个规则永远不会被使用(这个规则pkts在 iptables 中的计数保持为 0)。这个观察与作者所说的有关吗?

iptables nat
  • 1 个回答
  • 5084 Views
Martin Hope
bandie
Asked: 2018-11-30 01:52:16 +0800 CST

在 iptables 中,MASQUERADE 是否仅在新连接(SYN 数据包)上匹配?

  • 2

我观察到 MASQUERADE 目标与回复方向的数据包不匹配(就 netfilter conntrack 而言)。

我有一个简单的-t nat -A POSTROUTING -s 10.a.0.0/16 -d 10.b.0.0/16 -j MASQUERADE规则,除了所有链上的 ACCEPT 政策之外别无其他,似乎

案例 1) 来自 10.a/16 网络的连接初始化尝试的 SYN 数据包被 NAT-ed(这没关系),而

情况 2) 再次来自 10.a/16 网络的 SYN/ACK 数据包(响应来自 10.b/16 的 SYN,即在这种情况下发起方是 10.b/16)不会被翻译,但 src 地址是保持原样,简单地路由。

我不确定这是预期的行为还是我错过了什么?我的意思是我不希望它以任何其他方式表现,一切似乎都有效。但是文档并没有向我确认这是 MASQUERADE 目标的出厂默认行为。

你能确认一下吗?谢谢。

iptables nat
  • 3 个回答
  • 2543 Views
Martin Hope
ksivasuriyaprakash
Asked: 2017-12-04 18:16:58 +0800 CST

如果我有像 JioFi 这样的双 NAT ISP,如何在 linux 上配置 noip?

  • 3

我有一个双 NAT ISP 的JioFi Wifi 路由器。所以,我有一个WAN ip

路由器页面上的 WAN ip

和外部公共IP。

公共IP

每当我对特定端口进行端口转发时,只会影响WAN ip。因此,我无法访问我的网络服务器...

在此处输入图像描述

ubuntu nat
  • 1 个回答
  • 1507 Views

Sidebar

Stats

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

    模块 i915 可能缺少固件 /lib/firmware/i915/*

    • 3 个回答
  • Marko Smith

    无法获取 jessie backports 存储库

    • 4 个回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    user12345 无法获取 jessie backports 存储库 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl 为什么大多数 systemd 示例都包含 WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

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

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve