10.0.3.2
호스트에서 LXC 컨테이너 ( )가 실행 중입니다. 포트의 컨테이너 내부에서 서비스가 실행 중 7000
입니다.
호스트 ( 10.0.3.1
, lxcbr0
)에서 서비스에 연결할 수 있습니다.
$ telnet 10.0.3.2 7000
Trying 10.0.3.2...
Connected to 10.0.3.2.
Escape character is '^]'.
컨테이너 내부에서 실행되는 서비스를 외부 세계에 액세스 할 수있게 만들고 싶습니다. 따라서 7002
호스트의 포트 7000
를 컨테이너의 포트 로 전달하고 싶습니다 .
iptables -t nat -A PREROUTING -p tcp --dport 7002 -j DNAT --to 10.0.3.2:7000
( iptables -t nat -L
)의 결과 :
DNAT tcp -- anywhere anywhere tcp dpt:afs3-prserver to:10.0.3.2:7000
여전히 전달 된 포트를 사용하여 호스트에서 서비스에 액세스 할 수 없습니다.
$ telnet 10.0.3.1 7002
Trying 10.0.3.1...
telnet: Unable to connect to remote host: Connection refused
나는 여기 바보 같은 것을 놓친 것 같은 느낌이 든다. 무엇을 확인해야합니까? 이러한 상황을 디버깅하는 좋은 전략은 무엇입니까?
완전성을 위해 다음 iptables
은 호스트에서 설정되는 방법입니다 .
iptables -F
iptables -F -t nat
iptables -F -t mangle
iptables -X
iptables -P INPUT DROP
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -t nat -A POSTROUTING -o lxcbr0 -j MASQUERADE
iptables -t nat -A PREROUTING -p tcp --dport 7002 -j DNAT --to 10.0.3.2:7000
답변
기본 정책이 DROP이므로 10.0.3.1에서 7002 포트를 차단 한 것 같습니다
INPUT 규칙에 추가하십시오.
iptables -A INPUT -p tcp --dport 7002 -j ACCEPT
답변
나는 같은 문제에 부딪쳤다. 아직 해결책을 찾지 못했지만 다음과 같은 관찰 사항을 기록합니다.
호스트 ${host}
시스템 (Ubuntu 12.04)이 있고 LXC를 통해 게스트 시스템을 실행합니다. 게스트는 켜져 IP 10.0.3.248
있고 게이트웨이는 10.0.3.1
입니다. 게스트에서 웹 서버를 실행하고에서 (으) ${host}:8888
로 트래픽을 전달하려고 합니다 10.0.3.248:80
. 다음은 관련 iptables 항목입니다.
-A PREROUTING -p tcp --dport 8888 -j DNAT --to-destination 10.0.3.248:80
-A POSTROUTING -j MASQUERADE
현재 구성을 사용하면 다른 물리적 시스템에서 10.0.3.248:80의 웹 서버를 성공적으로 방문 할 수 있습니다. 그러나에서 10.0.3.248:80을 방문하려고하면 실패합니다 ${host}
. 다른 컴퓨터에서 LXC 내부의 해당 서비스를 방문 할 수 있습니다.
내에서 방문 ${host}
하면 패킷이 루프백 인터페이스를 통해 입력 체인으로 직접 들어갑니다. INPUT에서 모든 것을 허용하지만에서 서비스 수신이 없습니다 ${host}:8888
. wireshark에서 RST가 수신 된 것으로 보입니다. 다른 물리적 시스템을 방문하면 패킷이 PREROUTING 체인으로 이동하여 예상대로 DNAT되었습니다.
하나의 관련 게시물 :
답변
앞으로 규칙을 추가해야했습니다
iptables -A FORWARD -p tcp -d 10.0.3.2 --dport 7002 -j ACCEPT
답변
좋아, 2018 년의 5 센트 :
나는 LXC를 설치하고 놀았다. 내 컨테이너 IP는10.0.0.10
이 규칙을 추가했습니다.
iptables -t nat -A PREROUTING -p tcp -i ens192 --dport 81 -j DNAT --to-destination 10.0.0.10:22
효과가 없었습니다. 그런 다음 FORWARD 정책도 받아 들여도 모든 FORWARD를 차단하는 규칙이 있음을 깨달았습니다.
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
0 0 ACCEPT all -- * virbr0 0.0.0.0/0 10.0.0.0/24 ctstate RELATED,ESTABLISHED
0 0 ACCEPT all -- virbr0 * 10.0.0.0/24 0.0.0.0/0
0 0 ACCEPT all -- virbr0 virbr0 0.0.0.0/0 0.0.0.0/0
5 268 REJECT all -- * virbr0 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable
0 0 REJECT all -- virbr0 * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable
그래서 나는 상단에 규칙을 주입해야했습니다.
iptables -I FORWARD -p tcp -d 10.0.0.10 --dport 22 -j ACCEPT
이제 앞으로 host:81
-> 10.0.0.10:22
작동합니다.
답변
컨테이너는 호스트 브리지 인터페이스를 통해 LAN에서 액세스 할 수 있으므로 호스트와 동일한 서브넷에 연결됩니다.
라우터가 해당 포트를 컨테이너로 전달해야합니다.