标签: dnat

iptables/nat/prerouting 忽略 UDP 数据包吗?

在许多具有不同内核版本的服务器上具有相同的效果。

Iptables DNAT 规则有多种:

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 12345 -j DNAT --to-destination 10.20.30.40:5678
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 23456 -j DNAT --to-destination 10.11.12.13:5789
....
iptables -t nat -A PREROUTING -i eth0 -p udp --dport 34567 -j LOG --log-prefix 'natudp: '
iptables -t nat -A PREROUTING -i eth0 -p udp --dport 34567 -j DNAT --to-destination 10.55.66.77:34567
Run Code Online (Sandbox Code Playgroud)

问题:UDP 规则不适用于来自 eth0 的传入请求。
它们的数据包和字节计数器的值为零。
简化(删除 dport)没有效果。
结果,请求被传递到过滤器/输入链而不是转发。

来自虚拟接口(tap、veth)的数据包不存在这样的问题 - 它们被预路由规则捕获。
TCP 则没有这样的问题。
UDP …

nat iptables linux-networking dnat

6
推荐指数
1
解决办法
1182
查看次数

Proxmox Nat 网络问题

定义

我已经安装了 Proxmox 3.2,我正在尝试将虚拟机配置为处理所有流量并将它们转发到具有私有 ip 的节点的通信服务器。

我使用两个配置完全相同的 CentOS 虚拟机为 NAT 网络配置了服务器。

我所做的

Proxmox wiki 有一个非常有限和基本的 nat 网络文档。
我在这里和 proxmox 论坛上发现了类似的问题(这个这个)。我试图了解linux nat 网络的基础知识,所以我从头到尾完成了这个非常容易理解的教程。我阅读了这篇文章以了解iptables nat 规则

问题

安装和配置后,当我从主机 ping 到 VM 或从 VM 到主机时,输出是:

root@testPrx:~# ping 10.0.4.2
PING 10.0.4.2 (10.0.4.2) 56(84) bytes of data.
From 10.0.4.1 icmp_seq=2 Destination Host Unreachable
Run Code Online (Sandbox Code Playgroud)

当我尝试从具有 Internet 连接和 (192.168.0.3) 的同一网络中的服务器通过 telnet 连接到通信服务器的公共 IP 时

bash-4.1# telnet 192.168.0.2 2701
Trying 192.168.0.2...
telnet: connect to address 192.168.0.2: No route to host
Run Code Online (Sandbox Code Playgroud)

当我尝试 …

nat iptables proxmox dnat masquerade

5
推荐指数
1
解决办法
1万
查看次数

为什么某些 iptables DNAT 规则在重新启动之前不起作用?

我的 iptables DNAT 规则在重新启动之前不起作用。如果我重新启动服务器,则所有规则都有效。

架构描述:

数十台主机(发送方)向我的 Linux 路由器发送一些 UDP 数据包(在特定端口 9999 上单向发送)。这个 Linux 路由器使用 iptables 将这些数据包转发到多个主机(接收器)。

senderX 10.0.0.X ====> 带有 iptables 的 Linux 路由器 ====> receiverY 10.0.1.Y

linux 路由器有两个网卡 eth1 10.0.0.1/24(发送方)和 eth0 10.0.1.1/24(接收方)。

iptables 设置:

  • ip_forwarding 被激活
  • 所有默认策略都设置为 ACCEPT
  • 每个发件人都存在一个 iptables 规则,这是一个示例:
iptables -t nat -A PREROUTING -s 10.0.0.2 -i eth1 -j DNAT --to-destination 10.0.1.123

网络设置 :

ip addr show

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 …
Run Code Online (Sandbox Code Playgroud)

networking linux iptables udp dnat

4
推荐指数
1
解决办法
7107
查看次数

Mikrotik - 将 YouTube 重定向到本地友好页面

我正在配置 rb750。我想放弃 YouTube 访问权限并重定向到位于我们本地网络服务器中的友好页面。我可以放弃使用 l7 防火墙,但我无法重定向用户,因为 https。具体来说,你管使用某种技术来阻止这种“拦截”。我也尝试过 dnat 和 DNS,但两者都不起作用:(。我已经阅读了适用于 chrome、Firefox 和其他产品的 hsts(https 严格传输安全),并在网站导航期间允许完整的 https,这就是为什么我不能这样做。你们有什么想法吗?

https mikrotik redirect dnat hsts

4
推荐指数
1
解决办法
2471
查看次数

来自本地主机的 DNAT (127.0.0.1)

我想在 Linux 3.x(当前为 3.2.52,但我可以根据需要升级)上设置从 127.0.0.1、端口 4242 到 11.22.33.44、端口 5353 的 TCP DNAT。

看起来简单的 DNAT 规则设置不起作用,在 中telnet 127.0.0.1 4242挂起一分钟Trying 127.0.0.1...,然后超时。也许是因为内核正在丢弃返回的数据包(例如 SYN+ACK),因为它认为它们是火星的。我不需要解释为什么简单的解决方案不起作用,我需要一个解决方案,即使它很复杂(例如它涉及创建可能规则)。

我可以从127.0.0.0/8网络外的另一个本地 IP 地址设置通常的 DNAT ,但现在我需要 127.0.0.1 作为目标地址。我知道我可以设置用户级端口转发过程,但现在我需要一个解决方案,该解决方案可以使用iptables并且不需要辅助进程进行设置。

我在谷歌上搜索了一个小时。多次询问,但我找不到任何可行的解决方案。

还有很多关于 DNAT 到 127.0.0.1 的问题,但我不需要那个,我需要相反的。

请注意,单个iptables -j REDIRECT规则不起作用,因为我需要将传出数据包的 IP 地址从 127.0.0.1-j REDIRECT更改为 11.22.33.44,并且无法更改 IP 地址。

iptables localhost dnat

3
推荐指数
2
解决办法
6100
查看次数

使用 iptables 的 DNAT 仅适用于 eth0 上传入的流量

我有一台具有两个接口的计算机,这两个接口具有不同的可路由 IPv4 地址。为了在正确的接口上返回流量,我使用了这个答案和评论,它有效:我可以使用任一 IP 地址 ssh 进入机器。(我不知道这是否有任何影响,但可能有。)

现在我使用此答案添加了以下用于反向代理/DNAT 的 iptables 规则。我的启动脚本现在看起来像:

# eth0 is automatically brought up and gets 192.168.1.2 as IP

sudo ip link set eth1 up
sudo ip addr add 192.168.2.2/24 dev eth1
sudo ip rule add from 192.168.2.2 table frometh1
sudo ip route add default via 192.168.2.1 dev eth1 table frometh1

sudo iptables -t nat -A PREROUTING -i eth0 -p tcp -m tcp --dport 443 -j DNAT --to-destination 10.0.0.1:443
sudo iptables -t nat -A …
Run Code Online (Sandbox Code Playgroud)

iptables linux-networking dnat

2
推荐指数
1
解决办法
2393
查看次数

使用 iptables 进行端口转发

我得到了lo127.0.0.1)和eth0172.17.0.8)。我想将登陆的数据包重定向127.0.0.1:80172.17.42.1:80(从 路由eth0)。

我试过

iptables -t nat -A OUTPUT -p tcp --dport 80 -d 127.0.0.1 -j DNAT --to 172.17.42.1:80
Run Code Online (Sandbox Code Playgroud)

但是当我这样做时我没有curl localhost:80得到任何回应,当我这样做时curl 172.17.42.1:80它就起作用了。

networking iptables port-forwarding linux-networking dnat

1
推荐指数
1
解决办法
5436
查看次数