Cổng dường như được mở, nhưng kết nối đã từ chối


21

Tôi đang cố mở cổng 3000 trên Ubuntu 12.04, vì tôi có máy chủ web đang nghe ở đó. Tôi hơi xa khu vực liên minh của mình ở đây và đã dành nhiều giờ cố gắng giải quyết vấn đề mà không thành công.

Cổng dường như được mở trong tường lửa:

$> sudo ufw status
Status: active

To                         Action      From
--                         ------      ----
...
3000/tcp                   ALLOW       Anywhere
3000/tcp                   ALLOW       Anywhere (v6)

Máy chủ đang lắng nghe trên cổng đó:

$> netstat -an | grep "LISTEN "
...
tcp        0      0 127.0.0.1:3000          0.0.0.0:*               LISTEN     
...

Và tôi thậm chí có thể wgetổn định trang chỉ mục:

$> wget localhost:3000
Connecting to localhost (localhost)|127.0.0.1|:3000... connected.
HTTP request sent, awaiting response... 200 OK

Và tệp nhận được chứa những gì tôi mong đợi ("xin chào thế giới" :).

Tuy nhiên, khi thử từ một máy tính khác, hoặc nếu wget mydomain.com:3000tôi nhận được "connection refused", và nmap cho tôi biết rằng cổng không mở:

$> nmap -A -T4 mydomain.com
Host is up (0.00032s latency).
...
Not shown: 999 closed ports
PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 5.9p1 Debian 5ubuntu1 (protocol 2.0)
...
Service Info: OS: Linux

Bất cứ ý tưởng những gì tôi nên thử tiếp theo ???

CHỈNH SỬA

Đây là những gì traceroute cung cấp:

$> traceroute mydomain.com
traceroute to mydomain.com (176.31.x.x), 30 hops max, 60 byte packets
 1  mydomain.com (176.31.x.x)  0.034 ms  0.013 ms  0.010 ms

Vô hiệu hóa ufw, thử lại. Nếu điều đó không hoạt động, có một tường lửa / thiết bị khác giữa máy tính từ xa và máy chủ của bạn.
ish

Tôi đã thử rồi .. không giải quyết được :(
sebpiq

"có một tường lửa / thiết bị khác giữa máy tính từ xa và máy chủ của bạn." : điều này rất khó xảy ra. Tôi đã thử wget thứ hai từ máy chủ để nó thực hiện một chuyến đi khứ hồi qua mạng.
sebpiq

Huh? Bạn không thể gõ wget serverseb.com từ serverseb và lấy nó để thực hiện một chuyến đi khứ hồi mà không có một số phép thuật định tuyến iptables ưa thích. Vui lòng pastebin đầu ra traceroute mydomain.comtừ máy tính từ xa. Bạn có thể ** ra hai octet cuối cùng của IP (máy chủ) cuối cùng để bảo mật.
ish

được chỉnh sửa với một traceroute
sebpiq

Câu trả lời:


24

Nếu máy chủ của bạn chỉ nghe trên giao diện localhost, bạn sẽ không thể truy cập nó từ máy tính từ xa. Đây dường như là vấn đề chính của bạn, vì chỉ 127.0.0.1:3000 được liệt kê trong đầu ra netstat của bạn.

Bạn cũng sẽ cần đảm bảo rằng "mydomain.com" phân giải đúng địa chỉ IP cho máy của mình, như vậy việc kết nối với nó sẽ dẫn đến giao tiếp với giao diện bên ngoài của máy đó.


Tôi có thể ssh vào máy bằng tên của nó, vì vậy tôi đoán độ phân giải tên không phải là vấn đề ở đây. Làm thế nào tôi có thể làm cho máy chủ sẽ lắng nghe từ bất cứ đâu?
sebpiq

1
@sebpiq Độ phân giải này là dành riêng cho chương trình. Bạn cần liên kết trình nghe của chương trình với giao diện bên phải theo tên { eth0hoặc một cái gì đó tương tự), địa chỉ IP (192.168.1.99 hoặc một cái gì đó tương tự) hoặc địa chỉ MAC. Điều này phụ thuộc vào chương trình.
Phục hồi Monica - -

uugh ... nghe có vẻ điên rồ: S Tôi sẽ cố gắng google về điều đó. Máy chủ của tôi là node.js, vì vậy tôi sẽ kiểm tra xem có thông tin nào về giao diện tôi cần kết nối không.
sebpiq

Yeepee !!! @ObsessiveFOSS và dobey cảm ơn bạn RẤT NHIỀU! Máy chủ node.js của tôi thực sự chỉ nghe trên localhost. Tôi không biết nó đã làm như vậy, và không có hướng dẫn nào đề cập đến điều đó.
sebpiq

@sebpiq Không có vấn đề. :-)
Phục hồi Monica - -

13

Gần đây tôi đã gặp vấn đề này với máy chủ HTTPS của nodejs và giải pháp cho vấn đề này là không sử dụng "localhost", "127.0.0.1" hoặc thậm chí là tên miền. Đó là sử dụng "0.0.0.0"

Tôi tin rằng điều này hoạt động như một ký tự đại diện, hiện cho phép giải quyết công khai thông qua tên miền và nó cũng hoạt động với "localhost"

Chỉnh sửa: Đây là một liên kết đến trang serverfault về chủ đề 0.0.0.0: /server/78048/whats-the-difference-b between-ip-address-0-0-0-and- 127-0-0-1


Sử dụng "0.0.0.0" chính xác ở đâu?
Adaephon

@Adaephon Trong trường hợp của tôi, tôi đã tạo một máy chủ web dựa trên Node. Tôi đã phải thay đổi: }).listen(3000, '127.0.0.1'); để }).listen(3000, '0.0.0.0'); trong mã của tôi.
Sami Fouad

@Adaephon Vì vậy, tôi không chắc có bao nhiêu trợ giúp, nhưng bất cứ nơi nào bạn xác định IP / Tên máy chủ, hãy thử 0.0.0.0 thay thế.
Sami Fouad

bạn có thể vui lòng truy cập bài viết của tôi? stackoverflow.com/questions/37922804/ cường
Kar19

1
0.0.0.0 (hay đúng hơn là biểu diễn nhị phân 0) được coi là lắng nghe mọi người theo quan điểm của giao diện ổ cắm. Bạn có thể cung cấp một IP khác và nó sẽ chỉ nghe giao diện nơi bạn có IP đó. Ví dụ: nếu bạn cung cấp 127.0.0.1, bạn chỉ có thể nhận các kết nối từ 127. *. *. * IP (localhost thực sự) hoặc từ các máy tính khác có bảng định tuyến bị phá hỏng nghiêm trọng sẽ truy cập của bạn cho 127.0.0.1 (để kiểm tra điều này trường hợp cuối cùng!)
Paul Stelian

3

Có bất kỳ cơ hội nào mà bạn đang sử dụng AWS hoặc bất kỳ dịch vụ đám mây nào khác không? Trong trường hợp đó, cổng phải được mở ở mức cấu hình inctance (OS) hoặc sau đó. Cụ thể trong AWS, bạn nên tìm kiếm "Nhóm bảo mật" nơi bạn nên mở quyền truy cập vào cổng 3000

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.