Memcached 在选定的接口上进行监听

Memcached 在选定的接口上进行监听

我正在具有两个接口(eth0(公共)和 eth1(私有))的 Debian 服务器上设置 Memcached。

我希望 Memcached 同时监听 eth1 和 lo(环回),这样即使私有网络出现故障,也可以访问它,但 eth0(公共网络)无法访问。

来自手册页对于 memcached,我理解该-l选项只能接受一个 IP 地址。我曾考虑使用 UNIX 套接字进行本地连接,但手册页显示

-s
要监听的 Unix 套接字路径(禁用网络支持)。

我知道的唯一其他方法是使用 IPTables 阻止通过 eth0 的连接。有没有其他不使用防火墙的解决方案?

答案1

它不像列出接口并获取其所有绑定地址那么方便,并且需要知道绑定到接口的所有地址,但这是可以做到的。(请注意,您不能只列出一些接口,正如您所发现的——无论是单个接口、所有接口还是 IP 列表。)

-l选项可以采用接口、INADDR_ANY(表示所有接口上的所有地址)或逗号分隔的 IP 地址列表。IP 地址可以具有可选的端口规范。因此,例如

memcached -l 127.0.0.1:11211,127.0.0.1:11212,10.1.2.3

-p将使 memcached 仅在 127.0.0.1 上的端口 11211 和 11212 上监听 lo0,并且还会在或设置的任何端口上监听地址 10.1.2.3(无论是哪个接口)-U

您需要知道/拥有要绑定的所有地址。这可能lo0与 IP 列表之间存在很大差距(因为 memcached 的默认内部资源限制不允许绑定到该接口上的 ~2^24 个地址)

答案2

正如接受的答案所指出的那样,较新的版本确实支持它:

memcached -l 127.0.0.1:11211,127.0.0.2:11211  

或者

memcached -l 127.0.0.1:11211 -l 127.0.0.2:11211  

较旧的版本(随 CentOS 6.5 或更早版本一起提供)尚不支持此功能,它们可以监听全部接口、单个 IP 地址或套接字。
而不是上述任何组合。

解决此问题的唯一方法是将其绑定到所有接口并对公共接口设置防火墙,或者仅将其绑定到 127.0.0.1 并通过 iptables 将对 eth1:11211 的请求转发到 lo0:11211。

相关内容