Máy chủ PPTP sau router gia đình: sửa 1723 và GRE trước
Chạy PPTP sau router gia đình: TCP 1723, giao thức IP 47, hộp kiểm chuyển tiếp và số học MTU, cùng khi nào L2TP hoặc OpenVPN là lựa chọn đổi tốt hơn.
PPTP sau router gia đình hỏng theo hai cách không liên quan, và việc lẫn lộn chúng tốn cả một buổi tối. Một lỗi là khoảng trống trong chuyển tiếp: router cho TCP 1723 đi qua nhưng bỏ giao thức IP 47, nên máy khách treo ở lỗi 619. Lỗi kia là vấn đề kích thước: đường hầm dựng lên, xác thực xong rồi đóng băng khi một gói kích thước đầy đủ phải đi qua. Biết mình gặp lỗi nào là bước thực sự đầu tiên; phần còn lại so sánh router của bạn diễn đạt được gì, chứ không phải thương hiệu nào tốt hơn.
Hai vật mang, và chỉ một có cổng
PPTP tách thành hai vật mang: kết nối điều khiển trên TCP 1723 và các khung PPP bọc trong GRE mở rộng, tức giao thức IP 47. GRE không có số cổng, nên một quy tắc viết dưới dạng chuyển tiếp cổng 1723 không thể bao nó, dù giao diện web gọi trường đó là gì. Router gia đình thường cung cấp một hộp kiểm tên là chuyển tiếp PPTP thay cho quy tắc giao thức, và hộp kiểm đó làm hai việc: cho giao thức 47 đi qua tường lửa và dạy NAT theo dõi luồng GRE. Trên router Linux, những việc đó là mô-đun riêng và quy tắc riêng, vì thế chuyển tiếp cấu hình nửa vời vẫn cho ra một kênh điều khiển hoạt động. Hãy xác định nửa nào đang có trước khi thay đổi bất cứ điều gì.
Tường lửa của chính máy chủ cũng phải cho phép giao thức 47 từ địa chỉ router. Tường lửa máy chủ chỉ chấp nhận 1723/tcp sẽ tái tạo lỗi 619 từ bên trong LAN, khiến chuyển tiếp hỏng và quy tắc máy chủ hỏng trông giống nhau.
sudo iptables -S FORWARD | grep -i gre
sudo nft list ruleset | grep -i gre
lsmod | grep -E 'nf_conntrack_proto_gre|nf_nat_proto_gre'
Nếu thiếu mô-đun, hãy nạp chúng bằng sudo modprobe nf_conntrack_proto_gre nf_nat_proto_gre và làm cho việc nạp trở nên thường trực, vì lần khởi động lại quên trình trợ giúp sẽ biến đường hầm đang chạy thành lỗi 619 lần nữa. Quy tắc chuyển tiếp chỉ nên chấp nhận giao thức 47 hướng tới địa chỉ máy chủ, không phải toàn bộ LAN. Định nghĩa trong RFC 2637 tách đường điều khiển khỏi đường dữ liệu, vì thế không màn hình chuyển tiếp cổng nào mô tả PPTP đầy đủ.
Hộp kiểm chuyển tiếp hay quy tắc giao thức rõ ràng
Hộp kiểm chuyển tiếp chỉ mở tường lửa thì gần với cách đúng hơn một ALG ghi lại các định danh cuộc gọi. Nửa tường lửa có thể đoán trước, vì giao thức 47 hoặc được chấp nhận hoặc bị bỏ, và các bộ đếm cho biết cái nào. Nửa ghi lại là nơi các nhà sản xuất khác nhau, vì định danh cuộc gọi của PPTP là theo từng đường hầm và NAT chỉnh sửa chúng phải theo dõi mọi cuộc gọi mà nó chạm tới. Khi một máy khách kết nối được còn hai thì không, ALG là nghi phạm đầu tiên.
Quy tắc NAT đích cho 1723 cũng có vấn đề sở hữu. Nếu quy tắc cũ vẫn gửi 1723 tới một máy chủ đã ngừng chạy dịch vụ, các gói rơi vào cổng đóng và dịch vụ PPTP của chính router ngừng trả lời, điều này được đọc như lỗi tường lửa nhưng thực ra là đích đã lỗi thời. Hãy đọc quy tắc và đích của nó trước khi thêm cái thứ hai. Trên router tự kết thúc PPTP, quy tắc WAN cạnh tranh với dịch vụ tích hợp, nên hãy chọn một chủ sở hữu cho 1723 và giao thức 47.
Hai máy khách sau cùng một NAT là trường hợp phân biệt chuyển tiếp đơn giản với chuyển tiếp khéo. Chuyển tiếp giao thức 47 mà không ghi lại định danh cuộc gọi thường hành xử tốt hơn một trình trợ giúp cố sửa chúng.
Đo đường hầm trước khi đổ lỗi cho router
PPTP làm nhỏ tải trọng hữu ích, và mức nhỏ đó là số học, không phải điều huyền bí. Mỗi gói của đường hầm mang một tiêu đề IP ngoài, tiêu đề GRE mở rộng, tiêu đề PPP và, khi mã hóa, tiêu đề MPPE. Khi đường đi không mang nổi khung hình tạo ra, các gói nhỏ đi qua, đăng nhập hoàn tất, và phiên dừng lần đầu khi truyền tệp hoặc bắt tay TLS gửi một gói kích thước đầy đủ.
Hãy tính con số thay vì đoán. GRE mở rộng tốn 8 byte, PPP tốn 4, MPPE tốn 4, và tiêu đề IP ngoài tốn 20, nên đường hầm ăn 36 byte trước bất kỳ tải trọng nào. Trên WAN PPPoE kết thúc ở 1492, PPP MTU lớn nhất vừa là 1492 trừ 36, tức 1456. Đặt mtu và mru vào giá trị đó trong tùy chọn PPP và thử lại bằng ping không phân mảnh.
ping -M do -s 1464 198.51.100.7
grep -E '^(mtu|mru)' /etc/ppp/options.pptpd
Ping đo đường đi, không đo đường hầm: 1464 byte tải trọng cộng 28 byte tiêu đề IP và ICMP lấp đầy chính xác khung 1492 byte. Nếu ping đó thất bại, hạ con số cho đến khi qua rồi trừ 36 khỏi kết quả. MTU đường hầm đặt trên giới hạn của đường đi tạo ra đóng băng mà không có một dòng nhật ký nào nhắc đến kích thước.
PPTP, L2TP/IPsec hay OpenVPN trên cùng một router
Cùng một router có thể mang bất kỳ đường hầm nào trong ba loại thông dụng, và khác biệt là nó phải diễn đạt điều gì. PPTP cần hai quy tắc ở hai lớp khác nhau. L2TP trên IPsec cần UDP 500 và 4500 cho trao đổi khóa và, nếu NAT-T không mang, giao thức 50 cho tải trọng. OpenVPN cần một cổng UDP và không cần trình trợ giúp nào.
| Tunnel | What the router must allow | Practical note |
|---|---|---|
| PPTP | TCP 1723 and IP protocol 47 | Two transports, two rules |
| L2TP/IPsec | UDP 500, UDP 4500, protocol 50 without NAT-T | ESP has no port either |
| OpenVPN | UDP 1194 or a chosen TCP port | Single rule, no helper |
Cột L2TP không tự động thân thiện hơn GRE. ESP là giao thức IP 50 và cũng không có cổng, nên router gặp khó với giao thức 47 có thể gặp khó với giao thức 50 vì cùng lý do. NAT-T tồn tại để bọc ESP vào trong UDP 4500, và khi cả hai đầu hỗ trợ thì quy tắc giao thức 50 trở nên không cần thiết. Đó là thuộc tính của hai đầu, không phải của hộp kiểm PPTP trên router. Hãy xác nhận máy khách thực sự thương lượng kiểu đóng gói nào trước khi viết quy tắc cho cả hai.
OpenVPN là lựa chọn ít bộ phận chuyển động nhất ở phía router. Một cổng UDP, một chuyển tiếp, không trình trợ giúp theo dõi kết nối và không ghi lại định danh cuộc gọi. Cái đổi lại là một máy khách phải cài đặt thay cho bộ quay số tích hợp, và đó thường là lý do duy nhất khiến PPTP còn trong cuộc trò chuyện.
Cần sửa gì và cần thay gì
Sửa chuyển tiếp và MTU cho bạn một đường hầm hoạt động, không phải loại nên giữ. Xác thực MSCHAPv2 của PPTP đã có thể bị tấn công trong nhiều năm, và một đường hầm hoạt động chuyển thông tin đăng nhập có thể khôi phục ngoại tuyến. Nếu thiết bị từ xa chạy được L2TP/IPsec hoặc OpenVPN, hãy coi việc sửa chữa là biện pháp tạm thời có ngày.
Quyết định tùy vào đầu xa hỗ trợ gì và thỏa thuận cần kéo dài bao lâu. Thiết bị cũ chỉ nói PPTP được sửa; mọi thứ cài được máy khách sẽ được chuyển.
Trước khi đóng phiếu, hãy xác nhận máy khách chịu được truyền tệp lớn chứ không chỉ đăng nhập, và router vẫn giữ quy tắc giao thức 47 sau khi khởi động lại. Một đường hầm qua được một bản sao tệp rồi chết sau bản cập nhật firmware tiếp theo thì chưa bao giờ hoàn tất.