我有一台带有两个网络接口的 CentOS 7 服务器。一个指向我们的 LAN (ens32),另一个指向我们的 DMZ (ens33)。
虽然 LAN 接口工作正常,但我注意到,如果以 root 身份登录,流量似乎只会穿过 DMZ 接口,并且我不确定这意味着什么,或者它是否对我遇到的其他问题有任何净影响。
例如,如果我运行:
curl --interface ens32 ipecho.net/plain
作为非 root 用户,我将获得该接口的公共 IP。
如果我运行:
curl --interface ens33 ipecho.net/plain
作为非 root 用户,该命令似乎停止运行,我将被迫终止该进程。
如果我以 root 身份运行前面的命令,我将得到预期的输出,即该接口的公共 IP。
谁能解释一下这里可能发生了什么?
答案1
从官方页面可以看出curl
,要指定/绑定到特定接口,需要具有 CAP_NET_RAW 或以root
.
因此,root
能够进行绑定/路由,并且它不适用于普通用户。
当普通用户使用 时curl
,如果没有被允许使用该--interface
选项,则该操作将应用服务器的默认路由规则。
来自 curl 官方页面curl.1 手册页:
- 界面
使用指定的接口执行操作。您可以输入接口名称、IP 地址或主机名。一个例子可能看起来像:
卷曲--接口 eth0:1https://www.example.com/
如果多次使用此选项,则将使用最后一次。
在 Linux 上,它可用于指定 VRF,但二进制文件需要具有 CAP_NET_RAW 或以 root 身份运行。
有关 Linux VRF 的更多信息:https://www.kernel.org/doc/Documentation/networking/vrf.txt