2015-04-10 20 views
5

Khi tạo kết nối ngang hàng bằng kết nối âm thanh bằng webRTC, máy chủ STUN mà chúng tôi sử dụng sẽ trả về IP công khai nếu người dùng ở phía sau bộ định tuyến. Bây giờ trong các đối tượng ICE, tôi có thể thấy rằng các rport luôn luôn là một cái gì đó giữa 50000 và lên.Sử dụng các cổng cụ thể cho webRTC

Có cách nào để sử dụng một cổng cụ thể để người dùng không phải mở tất cả các cổng đó không?

+0

Không phải khi bạn sử dụng một trong các triển khai trình duyệt. Tuy nhiên, nếu bạn viết với API gốc, tôi tin rằng bạn có thể hạn chế các cổng ở đó. –

+1

Bạn có chắc chắn cổng được xác định bởi trình duyệt và KHÔNG bởi máy chủ STUN? –

+0

Người thu thập ứng cử viên ICE sử dụng một phạm vi cổng cụ thể và chỉ sử dụng các cổng trong phạm vi đó (hoặc nó chỉ là bất kỳ cổng nào). –

Trả lời

8

Có cách nào để sử dụng cổng cụ thể để người dùng không phải mở tất cả các cổng đó không?

Tôi nghĩ bạn hiểu nhầm. Toàn bộ điểm của STUN và ICE (bao gồm cả dẫn xuất WebRTC) của nó tồn tại để tránh bất cứ ai phải mở một cổng trên NAT của họ. Thay vào đó, STUN và ICE tự động mở cổng.

Đây là cách hoạt động (trong mô tả ngắn gọn).

  1. Khách hàng sẽ mở ra một ổ cắm trên một cổng ngẫu nhiên (ví dụ 50001)

  2. Liên hệ STUN server sử dụng socket để khám phá IP bên ngoài: ánh xạ cổng cho ổ cắm này. (ví dụ: 192.168.1.2 WEBC0001 bản đồ thành 1.2.3.4 WEBC0001). Các cổng không nhất thiết phải khớp giữa các địa chỉ nội bộ và bên ngoài, nhưng chúng thường làm, vì vậy tôi sẽ tiếp tục với ví dụ này.

  3. Thông qua cơ chế bên ngoài (SIP, XMPP, Jingle, ly có dây), danh sách địa chỉ ứng cử viên của cả hai nút được trao đổi. Điều này bao gồm tất cả các địa chỉ nội bộ và bên ngoài đã biết được thu thập (ví dụ: 192.168.1.2 respect0001 và 1.2.3.4 WEBC0001).

  4. Sử dụng cùng một ổ cắm được mở ở bước 1, cả hai bên gửi (STUN) tin nhắn (gói UDP) trực tiếp giữa nhau. Cặp thông báo đầu tiên có thể bị chặn bởi bộ định tuyến/tường lửa. Nhưng bởi vì một bên đã khởi tạo gói gửi đi đến địa chỉ từ xa, các gói tiếp theo từ địa chỉ đó được phép quay lại. Đây được gọi là "lỗ đục lỗ". Do đó, cổng được tự động mở mà không cần router cần bất kỳ cấu hình cụ thể nào.

Hy vọng điều này sẽ hữu ích.

+0

Tôi hiểu. Nhưng trừ khi tôi mở các cổng trên router của mình theo cách thủ công, webRTC sẽ không hoạt động. Đó là một bộ định tuyến FritzBox tiêu chuẩn triệu người khác sử dụng, tôi không nghĩ rằng tôi có cài đặt ưa thích.Nếu tôi không tự mở cổng, STUN sẽ không hoạt động (tôi thấy các địa chỉ bên trong và bên ngoài cho các ứng cử viên ICE, nhưng giao tiếp không tham gia) và nó rơi trở lại TURN (sau đó hoạt động). Nếu cổng đang mở, STUN hoạt động, không cần TURN. Nếu bạn có bất kỳ ý tưởng nào về lý do tại sao điều này - tôi sẽ rất biết ơn. –

+0

Nếu kết nối thất bại khi chỉ có một máy chủ STUN được cung cấp, nhưng thành công khi TURN có mặt, có thể do router/ISP của bạn hoạt động như một "đối xứng NAT" (còn gọi là ánh xạ địa chỉ phụ). Đó là một cách kỹ thuật để nói rằng hành vi lập bản đồ cổng là không thể đoán trước. Khi bạn mở các cổng trên NAT của mình để trực tiếp đến máy tính/thiết bị của bạn, ánh xạ cổng trở nên nhất quán. – selbie

+0

Chạy lệnh 'stunclient --mode full stun.stunprotocol.org' bằng cách sử dụng mã [ở đây] (http://www.stunprotocol.org) để xác thực hành vi NAT của bạn. – selbie

1

Bạn không thể lập trình trừ khi bạn đang sử dụng API webrtc trong ứng dụng của riêng bạn. Trình duyệt sẽ chọn các cổng cục bộ cụ thể từ một phạm vi cục bộ; và sau đó nó sẽ thông báo cho bạn về họ trong SDP và thông tin ứng cử viên ICE.

Máy chủ STUN chỉ giúp phát hiện xem máy khách có đang ở phía sau NAT/tường lửa hay không; và sau đó ICE sử dụng thông tin này để thiết lập kết nối ngang hàng.

Tôi đã nghe ở đâu đó có thể có cách để kiểm soát dải cổng đó thông qua các mẫu chính sách của Chrome (được sử dụng bởi các doanh nghiệp để hạn chế cài đặt Chrome) - http://www.chromium.org/administrators/policy-templates. Nó có thể đáng xem xét ...

Các vấn đề liên quan