Debian10 的 iptables redirect 规则

2020-05-18 10:51:55 +08:00
 plko345

我想实现的规则是, 主机 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 规则会转换好像, 有相关经验的吗?

3109 次点击
所在节点    Linux
7 条回复
plko345
2020-05-18 11:00:00 +08:00
忘记说了

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

这条规则在主机 A 上, `curl <主机 A 外网地址>:30000` 能成功访问服务, 也就是说回环接口是成功的
Saimen
2020-05-18 13:00:59 +08:00
使用 iptables-legacy
Jirajine
2020-05-18 13:08:02 +08:00
把那个 DNAT 规则在 A 上执行。
另外你这个用法怎么感觉有点不对呢,直接 ssh 端口转发不好么。
tulongtou
2020-05-18 13:20:51 +08:00
为啥虚拟机的服务不绑定成 0.0.0.0:8080
istek999
2020-05-18 14:14:38 +08:00
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
istek999
2020-05-18 14:15:51 +08:00
还有记得本地打开转发。
net.ipv4.ip_forward = 1
plko345
2020-05-18 23:06:23 +08:00
@istek999 感谢, 但有点不明白, 我的那条 DNAT 规则应该和你的是一样的呀, 可能是其他问题导致的吧

还有为什么 REDIRECT 规则不行

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/672785

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX