我有一台 ubuntu 服务器,ip 为 192.168.10.144,在这个服务器上我有一个使用 ip 范围 10.0.0.0/24 的 docker 网络。我需要将我的电脑连接到 docker 中运行的某些服务,因此我在 Mikrotik 中添加了一条路由:
# DST-ADDRESS PREF-SRC GATEWAY DISTANCE
0 ADS 0.0.0.0/0 192.168.0.1 1
1 A S 10.0.0.0/24 192.168.10.144 1
2 ADC 192.168.0.0/24 192.168.0.3 ether1-internet 0
3 ADC 192.168.10.0/24 192.168.10.1 ether2-proliant 0
但是我的电脑和docker服务之间的连接非常慢。我使用wireshark检查发生了什么,发现了一些tcp-restransmission消息:
我虽然认为 nat 规则可以解决问题,但是当使用以下规则时,我的计算机和 docker 之间无法进行通信:
0 ;;; default configuration
chain=srcnat action=masquerade out-interface=ether1-internet log=no
log-prefix=""
1 chain=dstnat action=dst-nat to-addresses=192.168.10.144 to-ports=80
protocol=tcp dst-port=8000 log=no log-prefix=""
2 X chain=dstnat action=dst-nat to-addresses=192.168.10.144 protocol=tcp
dst-address=10.0.0.0/24 log=no log-prefix=""
3 X chain=srcnat action=src-nat to-addresses=10.0.0.0/24 protocol=tcp
src-address=192.168.10.144 log=no log-prefix=""
我究竟做错了什么?
答案1
您的 PC 的 IP 地址是 192.168.10.53?您通过默认网关 192.168.10.1 向主机 10.0.0.77 发送流量。您的路由器会向您发回 ICMP 重定向数据包。您可以在此处阅读更多相关信息:https://www.cisco.com/c/en/us/support/docs/ip/routing-information-protocol-rip/13714-43.html
您可能会遇到与此处描述的问题类似的问题:https://forum.mikrotik.com/viewtopic.php?t=139465
可能的解决方案:在您的电脑上设置静态路由:10.0.0.0/24 via 192.168.10.144
答案2
我只是删除了 nat 规则并添加了伪装规则:
[admin@MikroTik] /ip firewall nat> print
Flags: X - disabled, I - invalid, D - dynamic
0 ;;; default configuration chain=srcnat action=masquerade out-interface=ether1-internet log=no log-prefix=""
1 chain=dstnat action=dst-nat to-addresses=192.168.10.144 to-ports=80 protocol=tcp dst-port=8000 log=no log-prefix=""
2 chain=srcnat action=masquerade dst-address=10.0.0.0/24 log=no log-prefix=""
现在一切都按预期进行。