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 / 问题

问题[nat](server)

Martin Hope
Andreas Buschka
Asked: 2024-10-02 19:06:44 +0800 CST

nftables:通过不同的 IP 地址访问主机

  • 5

我目前正在尝试解决以下问题,但是我的 google/SO 搜索到目前为止尚未找到匹配的场景:

从我的 Linux 主机,我必须到达目标主机 172.19.28.152。但是,由于公司网络的复杂性,我必须为该目标使用不同的 IP 地址:10.187.19.132。

我必须在 IP 层解决问题,因为应用程序不允许更改目标(它将始终使用 172... IP 地址,并且在我的场景中我无法更改该行为)。此外,应用程序不允许我指定 DNS 名称。

因此,我想配置 nftables 来执行以下操作:

如果数据包离开我自己的主机,目的地是 172.19.28.152,则将目标 IP 替换为 10.187.19.132。当目标回复时,将 10.187.19.132 重写为原始的 172.19.28.152 (NAT) 我的问题是我无法弄清楚这种规则的语法。

nat
  • 1 个回答
  • 24 Views
Martin Hope
TCB13
Asked: 2023-09-29 20:06:25 +0800 CST

nftables:具有动态 IP 的发夹/环回 NAT

  • 5

我有一个 Debian 12 服务器(公共 IP85.xxx.xxx.xxx地址为enp6s0),在网桥上运行一堆 LXC 容器cbr0。

由于公共 IP 是动态的,我必须设置forward规则prerouting才能dnat使传入请求到达容器。例如。端口 80/443 已连接到容器10.10.0.1。这是我的nftables规则:

flush ruleset

table inet filter {
  chain input {
    type filter hook input priority 0; policy drop;

    ct state {established, related} accept
    iifname lo accept
    iifname cbr0 accept
    ip protocol icmp accept
    ip6 nexthdr icmpv6 accept
  }
  chain forward {
    type filter hook forward priority 0; policy accept;
  }
  chain output {
    type filter hook output priority 0;
  }
}

table ip filter {
  chain forward {
    type filter hook forward priority 0; policy drop;

    oifname enp6s0 iifname cbr0 accept
    iifname enp6s0 oifname cbr0 ct state related, established accept
    # Webproxy
    iifname enp6s0 oifname cbr0 tcp dport 80 accept
    iifname enp6s0 oifname cbr0 udp dport 80 accept
    iifname enp6s0 oifname cbr0 tcp dport 443 accept
    iifname enp6s0 oifname cbr0 udp dport 443 accept
  }
}

table ip nat {

  chain postrouting {
    type nat hook postrouting priority 100; policy accept;
  }

  chain prerouting {
    type nat hook prerouting priority -100; policy accept;
    # Webproxy
    iifname enp6s0 tcp dport 80 dnat to 10.10.0.1:80
    iifname enp6s0 udp dport 80 dnat to 10.10.0.1:80
    iifname enp6s0 tcp dport 443 dnat to 10.10.0.1:443
    iifname enp6s0 udp dport 443 dnat to 10.10.0.1:443
  }

}

现在的问题是:发夹NAT。我有多个容器托管网站,有时其中一些容器需要使用域名与其他容器进行通信。当他们对这些域运行 DNS 查询时,他们将获取主机 IP 并且通信失败:

发夹NAT

如何在不诉诸 DNS 攻击的情况下解决这种情况?有没有办法nftables在拥有动态IP的情况下设置在内部转发请求?上面的内容是如何实现iifname的呢?

谢谢。

nat
  • 2 个回答
  • 120 Views
Martin Hope
Primemaster
Asked: 2023-02-03 08:12:51 +0800 CST

从路由器隐藏子网

  • 3

可以说我有一个类似于这样的网络布局:

子网

我在节点中需要什么才能?使所有 PC 都无法从主网络中被发现,但可以访问主网络/互联网?我不知道“主网络”本身是否是一个子网。主网络应该只看到相当于一个 IP 地址,屏蔽所有流量,就好像只使用一个 IP。我被告知使用子网路由器(NAT?)仍然可以使网络机器可被发现?

有没有明确的解决方案?我可以负担得起使用定制硬件或另一台带网卡的机器。如果这是一个简单的设置,我很抱歉我的网络知识不足。

nat
  • 1 个回答
  • 37 Views
Martin Hope
MikeSchem
Asked: 2022-11-09 18:08:50 +0800 CST

如何连接到具有不可更改静态 IP 且没有网关的 PLC

  • 5

概括

我有一个 PLC,它有一个无法更改的静态 IP 和一个无法设置的网关。我需要能够在我的公司网络上通过 TCP 与 PLC 通信。似乎是 NAT 的一个很好的候选人......

设想

我在 PLC 前面添加了一个 TC-Link ER605 路由器,其网络与 PLC 的网络 (192.168.1.1/24) 匹配,并且我已将 WAN 配置为我网络上的子网 (10.15.70.19/ 24)。我创建了如下所示的 NAT 规则(虚拟服务器)。

在此处输入图像描述

当我尝试从 WAN 端(10.15.70.19:502)连接到 PLC 时,超时。

当我插入 LAN 端时,我可以打开到 192.168.1.88:502 的连接没问题。

潜在问题

我认为问题在于数据包可以到达 PLC,但 PLC 没有网关,也不知道将数据包发回哪里。我已经通过用笔记本电脑代替 PLC 并运行 Wireshark 来确认这一点。我不确定这里还有什么可以尝试的。

任何帮助或洞察我的假设将不胜感激。

routing nat
  • 2 个回答
  • 34 Views
Martin Hope
WoJ
Asked: 2022-02-15 07:03:25 +0800 CST

CGNAT如何在客户端路由?

  • 2

在测试 Zscaler POC 时(从安全角度来看),我很难理解CGNAT是如何在客户端上路由的。

我主要关心(和问题)是100.64.xy 路由不在路由表中(Windows 10)。默认网关位于我的本地网络网关上,因此流量也无法到达那里。

CGNAT 流量的路由方式有什么特别之处?

客户端的路由表是

Active Routes:
Network Destination        Netmask          Gateway       Interface  Metric
          0.0.0.0          0.0.0.0     192.168.43.1   192.168.43.107     50
        127.0.0.0        255.0.0.0         On-link         127.0.0.1    331
        127.0.0.1  255.255.255.255         On-link         127.0.0.1    331
  127.255.255.255  255.255.255.255         On-link         127.0.0.1    331
     172.22.208.0    255.255.240.0         On-link      172.22.208.1    271
     172.22.208.1  255.255.255.255         On-link      172.22.208.1    271
   172.22.223.255  255.255.255.255         On-link      172.22.208.1    271
     192.168.43.0    255.255.255.0         On-link    192.168.43.107    306
   192.168.43.107  255.255.255.255         On-link    192.168.43.107    306
   192.168.43.255  255.255.255.255         On-link    192.168.43.107    306
        224.0.0.0        240.0.0.0         On-link         127.0.0.1    331
        224.0.0.0        240.0.0.0         On-link    192.168.43.107    306
        224.0.0.0        240.0.0.0         On-link      172.22.208.1    271
  255.255.255.255  255.255.255.255         On-link         127.0.0.1    331
  255.255.255.255  255.255.255.255         On-link    192.168.43.107    306
  255.255.255.255  255.255.255.255         On-link      172.22.208.1    271

下面是在 zscaler 上设置的内部公司服务的解析(因此通过 CGNAT 路由)。zscaler 之外的同名指向一个经典的 RFC1918 地址。

> nslookup internalcorporatesite.com
Server:  xxx.com
Address:  192.168.43.1

Non-authoritative answer:
Name:    internalcorporatesite.com
Address:  100.64.1.9

请注意,默认网关192.168.43.1不知道 CGNAT - 它是一个本地网络,并且 zscaler 使用 CGNAT。

routing nat
  • 1 个回答
  • 269 Views
Martin Hope
Jonas Stein
Asked: 2022-02-08 14:03:30 +0800 CST

双 NAT 到底有什么问题?

  • 0

有很多关于双 NAT 网络的警告。

DSL---modem with router-----second router
      configured by ISP     inner network
        first NAT            second NAT

在双 NAT 网络中究竟会出现什么问题?

router nat local-area-network ipv4
  • 1 个回答
  • 150 Views
Martin Hope
AAron
Asked: 2021-11-19 06:47:06 +0800 CST

iptables 端口转发,同时保留客户端 IP

  • 0

TL;DR:如何让连接到远程托管 VPS 的客户端 IP 成为通过 iptables 转发/nat 到我家运行的游戏服务器的 IP?

我在家里托管了一个 Rust 游戏服务器。我希望将其公开,但我不一定想向所有人提供我的 IP 地址。所以我租了一个小型 VPS,它打算基本上用作反向代理。我目前正在使用 nginx 通过 clinet-server VPN 转发流量,效果很好。但是,在游戏服务器上,每个玩家的 IP 都是 VPS 的隧道地址,而不是实际的客户端 IP。我尝试proxy_pass $remote_addr:28015 transparancy; proxy_responses 0在我的 nginx 配置中使用,没有变化。所以我然后切换到通过 iptables 来做。

我可以按照我想要的方式让它工作 99%,就是这样做的:

sysctl net.ipv4.ip_forward=1
iptables -t nat -A PREROUTING -p tcp --dport 28015 -j NAT --to-destination my_ip:28015
iptables -t nat -A PREROUTING -p udp --dport 28015 -j NAT --to-destination my_ip:28015
iptables -t nat -A PREROUTING -p tcp --dport 28016 -j NAT --to-destination my_ip:28016
iptables -t nat -A PREROUTING -p udp --dport 28016 -j NAT --to-destination my_ip:28016
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -A FORWARD -p tcp -d my_ip --dport 28015 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -p ucp -d my_ip --dport 28015 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
ufw disable
ufw enable
vps reboot \

它的作用与 nginx 基本相同,它工作正常,但每个人都只有 VPS 的公共 ip(注意,VPS 的 LAN 和公共 ip 地址是相同的)。如果我省略化装舞会,它就不起作用。

有关设置的一些信息:
VPS 有一个界面:eth0
VPS 正在运行Ubuntu 20.04
在我家,调制解调器处于通向 pfsesne 的通路模式。在 pfsense 上,我有端口转发规则将 28015/28016 tcp/udp 传递到gameserver.

旁注:我不确定为什么 nginx 不能为此工作。几乎就像 nginx 对proxy_pass $remote_addr指令什么都不做一样。

nat port-forwarding iptables nginx
  • 1 个回答
  • 467 Views
Martin Hope
Astron
Asked: 2021-11-19 05:53:55 +0800 CST

使用 IPTables 在 AWS 中的同一网络上进行目标 NAT

  • 0

在 AWS 中,我们在同一个子网/VPC 中有 3 个实例。我们希望客户端实例向第二个分析实例发出 DNS 请求,然后将请求转发到运行 DNS 服务的第三个实例。然后,DNS 服务应向分析实例提供响应,然后分析实例应响应客户端。

目的是分析实例可以拦截客户端和 DNS 实例之间的流量以进行分析。

客户端实例 -> 分析实例 (NAT) -> DNS 实例

当前设置允许客户端实例通过分析实例向 DNS 实例发送 DNS 请求。DNS 实例响应分析实例,tcpdump但客户端实例从未收到分析实例的响应。

我们在 AWS 中为执行 NAT 的分析实例关闭了源/目标检查。

我们首先在 Analysis 实例上启用了转发:

sudo sysctl -w net.ipv4.ip_forward=1

然后我们将以下 IPTables 规则添加到 Analysis 实例中

sudo iptables -A FORWARD -p udp --dport 53 -d 192.168.1.151 -j ACCEPT
sudo iptables -t nat -A PREROUTING -p udp --dport 53 -j DNAT --to-destination 192.168.1.151
sudo iptables -t nat -A POSTROUTING -d 192.168.1.151 -s 192.168.1.156 -p udp --dport 53 -j SNAT --to 192.168.1.213

POSTROUTING还尝试了以下其他规则

sudo iptables -t nat -A POSTROUTING -j MASQUERADE
sudo iptables -t nat -A POSTROUTING -p udp -d 192.168.1.151 --dport 53 -j SNAT --to-source 192.168.1.213
sudo iptables -t nat -A POSTROUTING -p udp -d 192.168.1.151 --dport 53 -j MASQUERADE

所有结果都相同,客户端实例永远不会收到 DNS 应答。关于什么可能阻止分析实例返回响应的想法?

nat iptables amazon-web-services
  • 1 个回答
  • 143 Views
Martin Hope
Leon
Asked: 2021-11-15 11:49:20 +0800 CST

我应该用 iptables 对 nat 表进行状态匹配吗?

  • 0

我经常看到 iptables 的链中有一些状态匹配规则,例如 INPUT。

我知道他们在做什么,我对此很感兴趣

我应该对表 NAT 的链执行相同的操作吗?

例如,在我家的路由器中,我希望它接受 ssh,并且还充当 NAT 路由器。

如果我们有:

-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT

为了获得更好的性能,我应该遵循以下操作吗?

-t nat -A POSTROUTING -m state --state RELATED,ESTABLISHED -j MASQUERADE

-t nat -A POSTROUTING -s 192.168.1.0/24 -o wan0 -m state --state NEW -j MASQUERADE

我想我不应该对POSTROUTING 链做同样的事情,而应该对 FORWARD 做同样的事情。

谢谢!

firewall router nat iptables nf-conntrack
  • 1 个回答
  • 104 Views
Martin Hope
Alexis
Asked: 2021-11-15 07:06:39 +0800 CST

为什么每个人都使用 MASQUERADE/SNAT 而不是 NAPT/PAT?

  • 1

故事

我有一个 VPN 线保护虚拟接口wg0(可以是其他任何东西)和一个物理接口eth0。我想将数据包从 VPN 路由到我的 LAN,或从一个接口路由到另一个接口。

几乎所有的博客、文章、教程都建议使用MASQUERADE或Source NAT仅使用:iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

而且,IP masquerade只是一个SNAT(Source NAT),它不会改变源端口。

问题

  • 我认为我应该使用NAPT/PAT是不是错了?
  • 为了完整起见,如何使用 iptables 和/或 nftables 添加 NAPT/PAT 规则?

想法

wg0由主机生成并从(或任何其他虚拟/物理接口)转发的数据包之间可能存在(源端口)冲突。恕我直言,必须使用 NAPT 来避免这些冲突。

RFC 2663,网络地址端口转换 (NAPT)

nat
  • 2 个回答
  • 3398 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