Một máy khách xác thực, nhận địa chỉ từ pool và đến được các dịch vụ trên máy chủ VPN, nhưng mọi đích công cộng đều hết thời gian chờ. Đó là dáng vẻ của một đường hầm không có lối ra, và nó giữ nguyên như vậy cho đến khi bốn điều riêng biệt cùng đúng. Máy khách phải chấp nhận tuyến mặc định, máy chủ phải chuyển tiếp, tường lửa phải cho phép đi qua, và các phản hồi cần một đường quay lại pool. Cả bốn lỗi đều chung một triệu chứng, nên hãy đổi một mục mỗi lần thử và ghi lại kết quả.

Đẩy tuyến mặc định và xác nhận những gì máy khách đã cài

Dòng phía máy chủ thì ngắn, và nó chỉ ảnh hưởng tới những máy khách chấp nhận các tùy chọn được đẩy xuống. Dạng def1 cài hai nửa tuyến mặc định thay vì xóa tuyến mặc định sẵn có, nhờ đó giữ kết nối hiện tại sống và vẫn bắt được mọi đích.

push "redirect-gateway def1"

Sau khi kết nối lại, hãy đọc bảng định tuyến của máy khách thay vì tin vào tệp cấu hình. Trên Linux, hai mục /1 xuất hiện cạnh tuyến mặc định gốc, và Windows hiển thị đúng cặp đó dưới dạng 0.0.0.0/1 và 128.0.0.0/1. Một máy khách bỏ qua các tùy chọn được đẩy xuống, hoặc được cấu hình để từ chối chúng, sẽ giữ tuyến mặc định cũ và không bao giờ gửi lưu lượng internet vào đường hầm. Hãy giải quyết câu hỏi đó trước khi thay đổi bất cứ điều gì trên máy chủ, vì không quy tắc nào phía máy chủ có thể bù đắp được.

Chuyển tiếp là thiết lập của máy chủ, không phải của VPN

Đọc cờ chuyển tiếp trước khi chạm vào định tuyến. Số không ở đó nghĩa là nhân hệ điều hành nhận gói của máy khách và từ chối chuyển nó đi tiếp, trông đúng như một chặn của tường lửa từ đầu xa. Đặt giá trị qua thư mục cấu hình của hệ thống để nó tồn tại sau khi khởi động lại.

sysctl net.ipv4.ip_forward
echo 'net.ipv4.ip_forward=1' | sudo tee /etc/sysctl.d/99-vpn-forward.conf
sudo sysctl --system

Tiếp theo, xác nhận bản thân máy chủ có tuyến hoạt động tới lối ra internet. Một yêu cầu từ shell của máy chủ chứng minh đường phía trên dùng được và không nói gì về việc chuyển tiếp gói của máy khách, nên hãy coi đó là hai phép thử riêng. Nếu máy chủ không tới được đích, bao nhiêu cấu hình chuyển tiếp cũng không giúp gì.

Chỉ cho phép đúng lưu lượng đi qua mà bạn định, và không gì khác

Các gói được chuyển tiếp đi qua tuyến forward; lưu lượng gửi tới chính máy chủ VPN đi qua input. Đây là hai quyết định khác nhau, và việc mở tuyến input không cho phép đi xuyên qua máy. Nhầm lẫn hai điều này là lý do phổ biến nhất khiến tường lửa trông như cho phép mọi thứ trong khi máy khách vẫn hết thời gian chờ.

Một chính sách tối thiểu chấp nhận các kết nối mới từ pool tới giao diện ra và chấp nhận các phản hồi thuộc những luồng đã thiết lập. Hãy đặt nó vào chủ sở hữu bộ quy tắc mà bản phân phối của bạn dùng, thay vì thêm một quy tắc trùng lặp ở mỗi lần khởi động; quy tắc trùng lặp sẽ chồng chất và các bộ đếm mất ý nghĩa.

sudo iptables -A FORWARD -i tun0 -o eth0 -s 10.90.0.0/24 -j ACCEPT
sudo iptables -A FORWARD -i eth0 -o tun0 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

Chuyển mọi chuỗi sang chấp nhận làm phép thử đạt và xóa đi lý do tồn tại của tường lửa. Giữ phạm vi ở pool và giao diện ra, và để yên việc chuyển tiếp không liên quan.

Cho các phản hồi một nơi để quay về

Địa chỉ của pool là riêng tư, nên máy chủ công cộng không thể chuyển phản hồi thẳng tới chúng. Hoặc máy chủ VPN dịch địa chỉ nguồn khi ra ngoài, hoặc một thiết bị phía trên giữ tuyến quay lại pool.

sudo iptables -t nat -A POSTROUTING -s 10.90.0.0/24 -o eth0 -j MASQUERADE

Chỉ thêm đúng một lớp dịch địa chỉ. Một NAT thứ hai ở phía trên sẽ che lớp thứ nhất và làm cả hai nhật ký gần như vô dụng khi có sự cố về sau. Nếu router phía trên đã định tuyến pool quay lại, việc thêm dịch trên máy chủ là dư thừa, và đường quay về khi đó phụ thuộc vào cấu hình của router ấy chứ không phải của bạn.

Các phiên bản trên đám mây thêm một cổng nữa, vì một số nền tảng bỏ những gói có địa chỉ nguồn không phải của phiên bản trừ khi nới lỏng kiểm tra đó. Thiết lập ấy nằm ngoài máy khách và dễ bị quên khi một máy thử cục bộ vẫn chạy tốt.

Hãy chứng minh từ máy khách, không phải từ shell của máy chủ

Bắt đầu bằng một yêu cầu IPv4 dạng số, rồi tra tên, rồi ứng dụng. ping chứng minh việc chuyển tiếp và dịch địa chỉ;nó không chứng minh gì về việc phân giải, vì các tùy chọn DNS chỉ có hiệu lực khi phần tích hợp phía máy khách cài chúng.

curl -4 -m 5 http://198.51.100.10/
dig +short example.com

Ghi lại các thay đổi và bước hoàn tác trong khi làm, để chính sách ra ngoài có thể được hoàn lại bằng một thao tác khi một phép thử thất bại. Công thức này chỉ bao quát IPv4; hãy kiểm kê IPv6 riêng trước khi khẳng định việc triển khai chuyên chở toàn bộ lưu lượng.

Bài viết liên quan