2013-09-02 1 views
4

내 lxc- 컨테이너에서 루프백으로 포트를 리디렉션하려고합니다.iptables가 외부 인터페이스에서 루프백 포트로 리디렉션합니까?

lxcbr1 브릿지로 구성된 내 lxc- 컨테이너 11.0.3.1.

호스트에서 lxc로, 그리고 lxc에서 호스트로 netcat으로 연결을 시도합니다. 성공.

로컬 호스트 :

# nc -l 1088 

LXC : "안녕하세요!"

# nc 11.0.3.1 1088 
Hello! 

그리고 로컬 호스트가 메시지를 참조하십시오. 성공!

나는 포트에게 그런 식으로 리디렉션하는 경우 :

# iptables -t nat -A PREROUTING -i lxcbr1 -p tcp -d 11.0.3.1 --dport 1088 -j DNAT --to-destination 127.0.0.1:1088 
# nc -l 127.0.0.1 1088 

그 후, 내가 LXC 컨테이너에서 연결을 시도 :

# nc 11.0.3.1 1088 
Hello ! 

그러나 로컬 호스트이 메시지가 표시하지 않습니다.

어디가 잘못 되었나요? 루프백은 PREROUTING를 사용하지 않는 https://serverfault.com/questions/211536/iptables-port-redirect-not-working-for-localhost

이 소리 단어 :

나는이 대답을 발견했다. 어떻게해야합니까?

+0

사전 라우팅 규칙은 패킷의 IP 주소를 변경하는 것이지 패킷을 전송할 인터페이스가 아닌가? – ash

답변

5

루프백 트래픽에 대한 DNAT를 사용할 수 없습니다.

비슷한 질문이 많이 있습니다. 이 블록에 대한 할당 -

127.0.0.0/8 : 1, 2, 3, 등등 ... RFC 5735에 따르면

는 네트워크 127.0.0.0/8는 호스트 자체 외부 라우팅해서는 안 인터넷 호스트 루프백 주소로 사용합니다. 더 높은 수준의 프로토콜에 의해이 블록 내의 임의의 주소 인 으로 전송 된 데이터 그램은 호스트 내부에서 루프백합니다. 루프백을 위해 일반적으로 127.0.0.1/32 만 사용하여 구현되는 입니다. [RFC1122], 섹션 3.2.1.3에 설명 된 으로 전체 127.0.0.0/8 블록 내의 주소는 어느 네트워크에도 합법적으로 나타나지 않습니다.

RFC 1700, 5 페이지,«호스트 외부에 나타나지 않아야합니다».

출구 중 하나가 있습니다. 사용 inetd입니다.

내 선택은 rinetd했다 등 많은 inted 서버, xinetd가있다.

나는이 매뉴얼 http://www.howtoforge.com/port-forwarding-with-rinetd-on-debian-etch

내 설정은 다음과 같습니다 사용 :

$ /etc/init.d/rinetd restart 
Stopping internet redirection server: rinetd. 
Starting internet redirection server: rinetd. 

그리고 재 매력처럼 작동합니다

$ cat /etc/rinetd.conf 
# bindadress bindport connectaddress connectport 
11.0.3.1  1081   127.0.0.1  1081 
11.0.3.1  1088   127.0.0.1  1088 

내가 rinetd가 다시 시작합니다.

나는이 질문을 나 혼자 끝내지 않을 것이다. 나는 아직도 그런 일에 더 우아한 해결책을 찾고있다. 어떤 동물, netcat 또는 inetd에 의해 이것을하는 것은 거의 불가능합니다. 그것은 중요하지 않습니다. 이것은 내 의견이다.

+0

감사합니다. 기존 LAMP 스택이있는 bitnami 호스트에 도커 응용 프로그램을 추가하려고 시도하면서 docker 응용 프로그램을 127.0.0.1:3306의 호스트의 mysql 서버로 리디렉션하려고했지만 아무 소용이 없었습니다. 이것은 내 문제를 해결했다. –

+0

하루 종일 검색했습니다. –

관련 문제