技术解析

Debian10 的 iptables redirect 规则
0
2021-06-17 20:31:24
idczone

我想实现的规则是, 主机 A(vmware 虚拟机, debian10) 有一个监听 127.0.0.1:8080 的服务, 我想主机 B (宿主机)能够访问 A 的服务

iptables -t nat -A PREROUTING -d <主机 A 的外网地址> -p tcp --dport 30000 -j REDIRECT --to-ports 8080

iptables -t nat -A OUTPUT -d <主机 A 的外网地址> -p tcp --dport 30000 -j REDIRECT --to-ports 8080

sysctl -w net.ipv4.conf.all.route_localnet=1

失败, 我又尝试了 DNAT 的规则

iptables -t nat -A PREROUTING -d <主机 A 的外网地址> -p tcp --dport 30000 -j DNAT --to-destination 127.0.0.1:8080

依然失败, 我之前在公司的 ubuntu 16.04 上实现过是成功的, 但现在在虚拟机上是失败的, 是否和 debian10 nftables 有关, debian10 上现在默认 iptables 规则会转换好像, 有相关经验的吗?


忘记说了
```sh
iptables -t nat -A OUTPUT -d <主机 A 的外网地址> -p tcp --dport 30000 -j REDIRECT --to-ports 8080
```
这条规则在主机 A 上, `curl <主机 A 外网地址>:30000` 能成功访问服务, 也就是说回环接口是成功的

使用 iptables-legacy

把那个 DNAT 规则在 A 上执行。
另外你这个用法怎么感觉有点不对呢,直接 ssh 端口转发不好么。

为啥虚拟机的服务不绑定成 0.0.0.0:8080

iptables -A PREROUTING -p tcp -m tcp --dport 本地端口 -j DNAT --to-destination 服务 IP:服务端口
iptables -A POSTROUTING -d 服务 IP/32 -p tcp -m tcp --dport 服务端口 -j SNAT --to-source 本地 IP

还有记得本地打开转发。
net.ipv4.ip_forward = 1

感谢, 但有点不明白, 我的那条 DNAT 规则应该和你的是一样的呀, 可能是其他问题导致的吧
还有为什么 REDIRECT 规则不行

数据地带为您的网站提供全球顶级IDC资源
在线咨询
专属客服