Memcached侦听所选接口


9

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

我希望Memcached同时监听eth1和lo(环回),以便即使专用网络出现故障也可以访问它,但不能访问eth0(公共)。

从memcached 的手册页中,我了解到该-l选项只能使用一个IP地址。我曾考虑过使用UNIX套接字进行本地连接,但是手册页中说

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

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

Answers:


8

它不像列出一个接口并获取其所有绑定地址那样方便,它需要知道绑定到接口的所有地址,但是可以做到。(请注意,您不能像已经发现的那样仅列出某些接口-一个接口,所有接口或IP列表。)

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

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

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

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


使用逗号分隔的IP地址列表确实有效。非常感谢!是否在特定版本中引入了此功能?因为在任何联机帮助页上都找不到“或逗号分隔的IP地址列表”这一行。
A.Jesin

1
@ A.Jesin:翻阅旧的配置,至少从2009年就开始使用。好像在2007年grokbase.com/t/danga/memcached/078qdmzphz/…lists.danga.com/上添加了多个IP的补丁。pipermail / memcached / attachments / 20070823 /…。我不清楚这是上游的memcached还是最终使其成为上游的本地mod。
埃里克·塔

@ A.Jesin:另外,不要忘记在StackExchange网站上您可以“接受”最适合您的答案(以便将来,其他有相同问题的人将立即找到最佳答案)。
Eric Towers 2014年

有趣!这似乎已经使其成为上游,但CentOS 6.x中的版本尚不支持它。
骗子

10

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

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。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.