为什么此 ip 路由/规则适用于 ssh,但不适用于 http/https?

为什么此 ip 路由/规则适用于 ssh,但不适用于 http/https?

我正在操作一个已连接的服务器,该服务器具有活动的 OpenVPN 客户端。为了允许 SSH 访问服务器,我在服务器的 WAN 接口 (eno1) 中添加了另一个辅助 IP 地址,然后按降序执行了以下命令:

ip route add default via (secondary IP GW) dev eno1:0 table 1234
ip rule add from (secondary IP/NETMASK) table 1234
ip addr add (secondary IP/NETMASK) dev eno1:0

此设置在 SSH 下运行良好,因为我可以通过 SSH 使用辅助 IP 访问服务器,甚至还可以使用相同的辅助 IP 对其进行 ping 操作。

问题是,当我尝试访问托管在同一主机(docker 上)上的 Web 服务器时,连接超时。但是,当我断开 OpenVPN 客户端时,它又可以正常工作了。我在此服务器上没有配置活动的防火墙。

以下是该命令的部分输出netstat -plnt

tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1852/sshd
tcp6       0      0 :::80                   :::*                    LISTEN      2615/dockerd
tcp6       0      0 :::22                   :::*                    LISTEN      1852/sshd
tcp6       0      0 :::443                  :::*                    LISTEN      2615/dockerd

我想知道为什么当我尝试使用 HTTP/HTTPS 连接到我的服务器时会遇到连接超时,而使用 SSH 连接则没问题。

另外,我可以添加额外的规则/路由或 IPTables 规则来解决这个问题吗?

答案1

  • 不要在该ip工具中使用别名命名方案。
  • 不要在规则中使用掩码,否则您将得到奇怪的行为。
  • 因此,您需要使用如下命令:
ip route add default via <ip-gw-secondary> dev eno1 table 1234
ip rule add from <2nd-ip> table 1234
ip addr add <ip-2nd>/<pref-len> dev eno1
  • 你如何在程序中指定辅助 IP 的使用?你应该使用一个选项来指定源地址。
  • 如果您的设置在 openvpn 处于活动状态时不起作用,您应该使用命令检查此时的实际路由ip route get <dst> from <ip-2nd>

相关内容