我想实现的规则是, 主机 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 规则会转换好像, 有相关经验的吗?
1
plko345 OP 忘记说了
```sh iptables -t nat -A OUTPUT -d <主机 A 的外网地址> -p tcp --dport 30000 -j REDIRECT --to-ports 8080 ``` 这条规则在主机 A 上, `curl <主机 A 外网地址>:30000` 能成功访问服务, 也就是说回环接口是成功的 |
2
Saimen 2020-05-18 13:00:59 +08:00 via Android
使用 iptables-legacy
|
3
Jirajine 2020-05-18 13:08:02 +08:00 via Android
把那个 DNAT 规则在 A 上执行。
另外你这个用法怎么感觉有点不对呢,直接 ssh 端口转发不好么。 |
4
tulongtou 2020-05-18 13:20:51 +08:00
为啥虚拟机的服务不绑定成 0.0.0.0:8080
|
5
istek999 2020-05-18 14:14:38 +08:00 1
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 |
6
istek999 2020-05-18 14:15:51 +08:00
还有记得本地打开转发。
net.ipv4.ip_forward = 1 |