我在端口 8090 上的一台机器上运行 Docker 容器。假设该机器的 IP 地址是192.168.0.3
。我想转发192.168.0.4:80
到192.168.0.3:8090
。该机器是且只能从本地网络内访问。
我尝试过的:
/ip firewall nat export
add action=dst-nat chain=srcnat dst-address=192.168.0.4 dst-port=80 \
src-address=192.168.0.0/24 to-address=192.168.0.3 to-port=8090 \
protocol=tcp
add action=masquerade chain=srcnat dst-address=192.168.0.4 dst-port=80 \
src-address=192.168.0.0/24 protocol=tcp
这不管用。
我是不是忘记了什么?我感觉我忽略了一些简单的事情,但还不知道是什么。
编辑:
IP 地址192.168.0.4
无法解析为我的网络中的任何内容。我只想“分配”并将其转发给192.168.0.3:8090
。这样做的原因是我想设置一个可解析为 Docker 容器的本地域名,而无需指定端口。
答案1
本地网络中的计算机会尝试直接访问其自己子网内的 IP 地址。因此,具有该 IP 地址的计算机(“工作站”)192.168.0.105
在尝试访问时会忽略默认网关192.168.0.4
,并尝试直接发送 tcp 数据包。
如果没有其他计算机应答工作站对该 MAC 地址的调用(“arp 请求”),此操作将会失败192.168.0.4
- 并且没有人会应答,因为该 IP 地址未在您的本地网络中使用。
您确实有多种解决方法:
- 添加
192.168.0.4
到防火墙上的接口并使用防火墙重新路由这些包 - 添加
192.168.0.4
到 docker-host 上的接口,并在 docker-host 本身上重定向流量 - 在 docker-host 上添加流量重定向,并
192.168.0.3
直接使用,而不是192.168.0.4
可能还存在其他选择。