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에서 액세스 할 수 있으므로 호스트와 동일한 서브넷에 연결됩니다.
라우터가 해당 포트를 컨테이너로 전달해야합니다.