선택된 인터페이스에서 Memcached 청취 다운되었지만 eth0

eth0 (public)과 eth1 (private)의 두 가지 인터페이스가있는 데비안 서버에서 Memcached를 설정하고 있습니다.

개인 네트워크가 다운되었지만 eth0 (공개)이 아닌 경우에도 액세스 할 수 있도록 Memcached가 eth1과 lo (루프백) 모두를 수신하기를 원합니다.

로부터 man 페이지 이해 memcached를위한 것이 -l옵션은 하나의 IP 주소를 취할 수 있습니다. 로컬 연결에 UNIX 소켓을 사용하려고 생각했지만 매뉴얼 페이지에

-s
청취 할 유닉스 소켓 경로 ( 네트워크 지원을 비활성화합니다 ).

내가 아는 유일한 방법은 IPTables를 사용하여 eth0을 통한 연결을 차단하는 것입니다. 방화벽을 사용하지 않는 다른 솔루션이 있습니까?



답변

인터페이스를 나열하고 모든 바인딩 된 주소를 가져 오는 것만 큼 편리하지는 않으며 인터페이스에 바인딩 된 모든 주소를 알아야하지만 가능합니다. 검색 한대로 단일 인터페이스, 모든 인터페이스 또는 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합니다.

바인딩하려는 모든 주소를 알고 있어야합니다. 이것은 아마도 lo0IP 목록과 IP 목록 사이에 큰 간격 일 것 입니다 (memcached의 기본 내부 리소스 제한으로 인해 해당 인터페이스의 ~ 2 ^ 24 주소에 바인딩 할 수 없기 때문에)


답변

허용되는 답변에서 지적했듯이 최신 버전은 다음을 지원합니다.

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로 전달하는 것입니다.