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
    • 最新
    • 标签
主页 / user-276314

Kevin Keane's questions

Martin Hope
Kevin Keane
Asked: 2020-12-15 17:40:36 +0800 CST

RHEL/CentOS 现在要在系统启动时向 firewalld 添加 nftable 规则吗?

  • 1

我在 RHEL 8 上使用 firewalld,并且还需要添加一些 nftable 规则。

(nftable 规则基于对CentOS 8 作为 NAT 路由器的回答,带有 nft 和 firewalld - 如何让它通过 TFTP?)

在正在运行的防火墙中,这与 nft -f 命令配合得很好。

但是,这会在重新启动时丢失。

RedHat 文档(在付费墙后面)建议使用 nftables.service 服务在重新启动时加载规则,但这不能与 firewalld 一起使用。这两个服务被列为冲突,即使它们不是,firewalld 也可能会刷新 nftable 规则。

是否有另一种方法可以让 nftable 规则在重新启动时加载?

nftables firewalld
  • 1 个回答
  • 1014 Views
Martin Hope
Kevin Keane
Asked: 2020-11-11 15:02:22 +0800 CST

CentOS 8 作为带有 nft 和 firewalld 的 NAT 路由器 - 如何让它通过 TFTP?

  • 4

我正在尝试在隐藏在 NAT 路由器后面的一个网络上设置 PXE 引导(需要 TFTP)。

我的问题与网络上的许多其他问题相似,但我发现的所有答案都适用于带有 iptables 的 CentOS 7。我需要使用以 firewalld 和 nft 作为后端的 CentOS 8 来执行此操作。

无法对 TFTP 流量进行 NAT,因为 iptables 未将返回连接转发到客户端,尽管 TFTP 帮助程序创建了期望 https://unix.stackexchange.com/questions/579508/iptables-rules-to-forward-tftp-via-nat

这是我的简化网络图:

     Outside NAT               Inside NAT
10.0.10.10  10.0.10.11->192.168.1.1  192.168.1.2
TFTP server --------> NAT ---------> PXE/TFTP client

TFTP 不工作。使用 tcpdump,我看到 RRQ 消息从 192.168.1.2 成功传输到 10.0.10.10。响应到达路由器,但未正确 NAT 到达客户端。

我尝试了 sysctl net.netfilter.nf_contrack_helper 的两种设置(更改设置后重新启动):

# sysctl -a | grep conntrack_helper
net.netfilter.nf_conntrack_helper = 0

使用 nf_contrack_helper=0:

tcpdump: listening on any, link-type LINUX_SLL (Linux cooked), capture size 262144 bytes

Initial RRQ:

14:02:27.842563 IP (tos 0x0, ttl 64, id 64642, offset 0, flags [DF], proto UDP (17), length 54)
    192.168.1.2.36799 > 10.0.10.10.69: [udp sum ok]  26 RRQ "grub2/grubx64.efi" octet

Initial RRQ after NAT:

14:02:27.842619 IP (tos 0x0, ttl 63, id 64642, offset 0, flags [DF], proto UDP (17), length 54)
    10.0.10.11.36799 > 10.0.10.10.69: [udp sum ok]  26 RRQ "grub2/grubx64.efi" octet

Response from TFTP server to NAT router:

14:02:27.857924 IP (tos 0x0, ttl 63, id 60000, offset 0, flags [none], proto UDP (17), length 544)
    10.0.10.10.60702 > 10.0.10.11.36799: [udp sum ok] UDP, length 516

(repeated several times until timeout)

在 nf_contrack_helper=1 的情况下,传出的数据包甚至根本没有经过 NAT:

tcpdump: listening on any, link-type LINUX_SLL (Linux cooked), capture size 262144 bytes

Initial RRQ:

14:02:27.842563 IP (tos 0x0, ttl 64, id 64642, offset 0, flags [DF], proto UDP (17), length 54)
    192.168.1.2.36799 > 10.0.10.10.69: [udp sum ok]  26 RRQ "grub2/grubx64.efi" octet

(repeated several times until timeout)

都加载了 nf_*_tftp 助手(无论 nf_contrack_helper 设置如何):

# lsmod | grep tftp
nf_nat_tftp            16384  0
nf_conntrack_tftp      16384  3 nf_nat_tftp
nf_nat                 36864  3 nf_nat_ipv6,nf_nat_ipv4,nf_nat_tftp
nf_conntrack          155648  10 nf_conntrack_ipv6,nf_conntrack_ipv4,nf_nat,nf_conntrack_tftp,nft_ct,nf_nat_ipv6,nf_nat_ipv4,nf_nat_tftp,nft_masq,nft_masq_ipv4

上面链接的一篇文章建议使用 iptables 进行以下操作(这是有道理的):

iptables -A PREROUTING -t raw -p udp --dport 69 -s 192.168.11.0/24 -d 172.16.0.0/16 -j CT --helper tftp

我将如何使用带有 nft 后端的 firewalld 进行等效操作。

更新:

firewalld 配置相当复杂,所以我只添加相关区域:

外部区域:

<?xml version="1.0" encoding="utf-8"?>
<zone>
  <source address="10.0.10.0/24"/>
  <service name="tftp-client"/>
  <service name="ssh"/>
  <masquerade/>
</zone>

和内部区域:

<?xml version="1.0" encoding="utf-8"?>
<zone>
  <source address="192.168.1.0/24"/>
  <service name="dhcp"/>
  <service name="ssh"/>
  <service name="dns"/>
  <service name="tftp"/>
  <masquerade/>
</zone>

注意:内部区域的化妆舞会是一个错误。我删除了它,但行为没有改变。

区域漂移被禁用。

更新 2:

要回答评论者的请求:

DHCP 配置

DHCP 服务器与 NAT 路由器(网络图中的 192.168.1.1)在同一系统上运行。它是标准 ISC DHCP,分发 IP 地址(作为固定地址;不涉及池)、掩码、网关、DNS 服务器等,以及 PXE Boot 下一个服务器和文件名选项。

这一切显然有效。tcpdump 显示客户端向服务器发送了正确的 RRQ 数据包。

响应返回到 NAT 路由器,但不会发送到 NAT 后侧。

有关 TFTP 如何工作以及它如何与 NAT 中断的详细信息

如果您了解 TFTP 协议,就很清楚发生了什么;我只是不知道如何使用 firewalld/nft/CentOS 8 来处理它。

从根本上说,问题在于 TFTP 协议以非标准方式使用 UDP 端口。在“标准”基于 UDP 的协议(例如 DNS)中,响应来自服务器侦听的同一端口。

Request: client:54321 -> server:53
Response: server:53 -> client:54321

(其中 54321 可以是客户端选择的任何随机临时端口号)。

NAT 匹配这些 IP 地址和端口以识别哪个响应属于哪个请求。

TFTP 的做法不同;响应不是来自端口 69,而是来自其他一些随机端口。

Request (RRQ): client54321 -> server:69
Response (Data): server:12345 -> client:54321

其中 54321 再次是客户端选择的随机临时端口,而 12345 是服务器选择的随机临时端口。

结果,标准 NAT 行为将找不到与源服务器匹配的连接:12345,并丢弃数据包。

此问题的解决方案涉及使用帮助程序 - 理解此怪癖的 nf_nat_tftp 内核模块。

我只是无法弄清楚如何使用 CentOS 8、nftables 和 firewalld 来实现这一点。

使用 nftables 的答案对我来说是完全可以接受的,只要它不违反任何防火墙规则。

nftables firewalld tftp
  • 1 个回答
  • 3004 Views
Martin Hope
Kevin Keane
Asked: 2017-12-05 22:21:30 +0800 CST

Ansible:在保留修改的同时添加行

  • 0

我正在寻找一种在保留本地修改的同时修改配置文件的方法。配置文件的格式类似于:

entry1: This is a local
entry2: modification.
entry3:

该文件由应由 Ansible 设置的可变数量的键(entry1、entry2、entry3 以及可能后来的 entry4 等 - 它可能上升到 100,将来甚至可能上升到 2000 左右)组成,后跟其他程序将添加到配置文件中的其他选项。

我希望 Ansible 能够向文件添加新密钥,同时保留任何现有的本地修改。

最自然的拟合似乎是 lineinfile - 但不幸的是,它只能让我选择保留本地修改(使用 backref=yes)或添加新键(backref=yes 不会添加新行)。

有什么好方法可以完成我需要的吗?

我可以在启用 lineinfile 和 backref 的情况下修改现有条目:

- lineinfile:
  path: myfile.conf
  regexp: "^{{ item }}: (.*)"
  backref: yes
  line: "{{ item }}: \1"
  with_items:
    - entry1
    - entry2
    - entry3
    - entry4

但这不会将 entry4 添加到我的文件中。

或者我可以使用 backref: no

- lineinfile:
  path: myfile.conf
  regexp: "^{{ item }}: (.*)"
  backref: no
  line: "{{ item }}:"
  with_items:
    - entry1
    - entry2
    - entry3
    - entry4

但这会破坏 entry1、entry2 和 entry3 的本地修改。

或者我可以更改正则表达式:

- lineinfile:
  path: myfile.conf
  regexp: "^"
  backref: no
  line: "{{ item }}:"
  with_items:
    - entry1
    - entry2
    - entry3
    - entry4

但这当然会在每次运行时添加每个键。

我还研究过使用模板(但还没有找到一种简单的方法来使用它来操作现有文件)。

当然,我可以编写自己的 Python 模块,但必须有更简单的方法来做到这一点?

ansible
  • 3 个回答
  • 563 Views
Martin Hope
Kevin Keane
Asked: 2015-08-18 20:00:47 +0800 CST

IPv6 对 /64 进行子网划分 - 什么会中断,以及如何解决它?

  • 35

在 IPv6 中,您不应将子网划分为小于 /64 (RFC 5375) 的任何内容。除其他外,SLAAC 不适用于较小的子网,而且显然其他一些功能也会中断。

对于 ISP 只会为您提供单个 /64 但您在内部需要多个子网的情况,有哪些解决方法?常见的建议似乎是找到另一个将分发 /56 或 /48 的 ISP。在世界的某些地方,这可能行得通,但在我们地区(美国),由于缺乏竞争,这是不可行的。如果我的大多数客户有一个为他们所在地区服务的 ISP,他们就会很幸运。这里的很多人还在拨号上网。

我的客户没有资格从 ARIN 获得他们自己的 /48。

ipv6
  • 3 个回答
  • 25135 Views

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