在许多具有不同内核版本的服务器上具有相同的效果。
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 …
我已经安装了 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)
当我尝试 …
我的 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 -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) 我正在配置 rb750。我想放弃 YouTube 访问权限并重定向到位于我们本地网络服务器中的友好页面。我可以放弃使用 l7 防火墙,但我无法重定向用户,因为 https。具体来说,你管使用某种技术来阻止这种“拦截”。我也尝试过 dnat 和 DNS,但两者都不起作用:(。我已经阅读了适用于 chrome、Firefox 和其他产品的 hsts(https 严格传输安全),并在网站导航期间允许完整的 https,这就是为什么我不能这样做。你们有什么想法吗?
我想在 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 地址。
我有一台具有两个接口的计算机,这两个接口具有不同的可路由 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) 我得到了lo
(127.0.0.1
)和eth0
(172.17.0.8
)。我想将登陆的数据包重定向127.0.0.1:80
到172.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
它就起作用了。