2017-10-03 4 views
-1

Google Cloud에서 실행중인 VM 인스턴스 "instance-1"(Linux 인스턴스 -1 3.16.0-4-amd64 # 1 SMP 데비안 3.16.43-2 + deb8u5 (2017-09-19) x86_64 GNU/Linux).Google Cloud + Linux TCP 연결이 거부되었습니다. 원인은 무엇입니까?

나는 1234 포트에서 서비스를하고 "예를-1"자체에서 요청이있을 경우 :

curl localhost:1234 

이 예상되는 응답을 생성합니다.

내가 방화벽 규칙을 설정 한 : 기본 - 수 - HTTP를 규칙에 떨어져 포트 번호 및 우선 순위에서, 동일

my-service Ingress Apply to all  IP ranges: 0.0.0.0/0 tcp:1234 Allow 1000 

.

그러나 인터넷에서 시도 할 때 (aa.bb.cc.dd 예를-1의 공용 IP 주소를 나타냅니다) : 그러나

curl aa.bb.cc.dd:1234 --> curl: (7) Failed to connect to aa.bb.cc.dd port 1234: Connection refused 

curl aa.bb.cc.dd:80 

는 예상 응답 (하지를 제공합니다 1234에서 원했던 것과 동일)

실험으로, 나는 "instance-1"과 동일한 서브 네트워크 내에서 또 다른 클라우드 인스턴스 "instance-2"를 만들었습니다. 기본 규칙 :

default-allow-internal Ingress Apply to all  IP ranges: 10.128.0.0/9 tcp:0-65535, udp:0-65535, 1 more Allow 65534 

으로 처리해야하지만 인스턴스 -1 : 1234에 대한 연결도 거부됩니다. 내 맞춤 규칙을 삭제 한 후에도

가 나는 예를-1의 로컬 방화벽 문제라고 생각하지 않습니다

[email protected]:~/.ssh$ sudo iptables -L Chain INPUT (policy ACCEPT) target  prot opt source    destination   Chain FORWARD (policy ACCEPT) target  prot opt source    destination   Chain OUTPUT (policy ACCEPT) target  prot opt source    destination 

그래서, 나는이 개 다른 포트에 같은 구글 클라우드 방화벽 규칙을 설정하지만, 하나의 허용되고 다른 거절했다. 나는 왜 그런지 알지 못한다. 그리고 instance-1의 추가 방화벽에 대해서는 아무 것도 볼 수 없습니다.

instance-1 자체가 아닌 다른 곳에서 instance-1 로의 연결을 거부 할 수있는 대상은 무엇입니까?

+0

스택 오버플로는 프로그래밍 및 개발 관련 질문에 대한 사이트입니다. 이 질문은 프로그래밍이나 개발에 관한 것이 아니기 때문에 주제와는 거리가 먼 것처럼 보입니다. 도움말 센터에서 [여기에서 내가 질문 할 수있는 항목은 무엇입니까?] (http://stackoverflow.com/help/on-topic)를 참조하십시오. 아마도 [수퍼 유저] (http : // 수퍼 유저.com /) 또는 [Unix & Linux Stack Exchange] (http://unix.stackexchange.com/)가 더 나은 곳입니다. – jww

답변

1

Linux 용 서비스는 수신 대기중인 주소를 선택할 수 있습니다. 서비스가 127.0.0.1에서 수신하는 경우 방화벽이없는 경우에도 만 로컬 연결을 허용합니다. 모든 인터페이스에서 연결을 허용하려면 서비스가 0.0.0.0에 수신 대기해야합니다.

이 문제를 테스트하려면 sudo netstat -lntp을 실행하고 서비스에서 수신 대기중인 주소를 확인하십시오. 127.0.0.1:1234이라고 표시되면 수신 주소를 변경해야합니다. 0.0.0.0:1234이라고 표시되면 다른 문제입니다.

다른 소프트웨어는 수신 주소를 변경하기 위해 다른 단계가 필요합니다. Apache는 Listen directive을 사용합니다. tomcat HTTP 커넥터는 address Connector parameter을 사용합니다. 자신을 코딩 할 때 소켓에서 bind을 호출 할 때 수신 대기 주소를 지정하십시오.

+0

감사합니다. 루프백 인터페이스에서만 수신 대기합니다. 여기 stackexchange에서 물어 보았어 야합니다. 죄송합니다. 하지만 답을 주셔서 대단히 감사합니다! –