Máy tính xách tay kết nối với VPN của văn phòng và mọi thứ đi theo nó, kể cả trang web của một máy in và một mạng nội bộ chỉ phản hồi trên mạng cục bộ. Một tuyến tạo bằng tay khắc phục điều đó trong một giờ, rồi kết nối rớt, quay lại và ngoại lệ biến mất. Tunnel không có gì sai: Windows giữ một bảng định tuyến duy nhất, và bộ điều hợp VPN ghi lại phần của nó trong bảng đó ở mỗi lần kết nối. Thứ tồn tại là những gì nằm ngoài các mục của chính bộ điều hợp.

Tunnel tiếp quản mục nào

Ghi lại bảng hai lần, một lần khi tunnel tắt và một lần khi bật, rồi so sánh các dòng mặc định. Khi hồ sơ chiếm tiền tố mặc định, mục của bộ điều hợp là hàng rộng nhất trong bảng, nên mọi ngoại lệ phải hẹp hơn nó. Đó là số học về độ dài tiền tố, không phải tuyên bố về niềm tin hay chính sách. Nó cũng xác định ngoại lệ phải nêu tên giao diện nào.

Ghi lại chỉ số giao diện và cổng mặc định cục bộ trước khi tiếp tục, vì cả hai thay đổi khi máy tham gia mạng khác. Các lệnh bên dưới đọc chúng từ máy chứ không từ trí nhớ.

route print -4
Find-NetRoute -RemoteIPAddress 198.51.100.30

Lệnh thứ hai báo cáo giao diện và chặng kế tiếp mà địa chỉ đó sẽ dùng ngay bây giờ, tốt hơn là đọc bốn mươi dòng rồi đoán. Chạy nó trước và sau khi kết nối là bạn có cặp đáng đính kèm vào bản ghi thay đổi. Cả hai đầu ra cung cấp những con số dùng trong phần còn lại của trang này.

Tuyến máy chủ thắng nhờ tính cụ thể

Khớp tiền tố dài nhất quyết định người thắng, nên một /32 qua cổng vật lý đánh bại tuyến mặc định qua tunnel mà không cần chạm vào tunnel. Lưu lượng đến địa chỉ đó rời giao diện cục bộ trong khi mọi thứ khác giữ đường đi hiện có. Tunnel vẫn mang tuyến mặc định và chỉ ngừng là ứng viên duy nhất cho đích đó. Độ dài tiền tố là đòn bẩy duy nhất mà bảng phơi ra, và với việc này thế là đủ.

Tính cụ thể cũng loại bỏ lối tắt hiển nhiên là loại trừ một tên miền, vì bảng khớp địa chỉ và một tên có thể phân giải thành nhiều địa chỉ. Phân giải máy chủ trước, rồi quyết định địa chỉ nào của nó xứng đáng được ngoại lệ.

Với mọi thứ bên dưới, giả sử một kết nối tên là Office, một cổng cục bộ 10.0.0.1 trên giao diện 7, và một đích tại 198.51.100.30. Đó là chỗ giữ chỗ chứ không phải mặc định, và các lệnh bên trên tạo ra giá trị mà máy của bạn thực sự dùng. Giữ ghi chú thay thế này cùng bản ghi thay đổi để người đọc sau không sao chép các con số.

Làm cho tuyến sống lâu hơn lần kết nối lại kế tiếp

Windows không cung cấp chỉ dẫn loại trừ nào trên kết nối VPN, nên ngoại lệ phải sống trên giao diện vật lý, nơi bộ điều hợp sẽ không ghi lại nó. Cmdlet trông như câu trả lời lại làm điều ngược lại: Add-VpnConnectionRoute đưa một tiền tố vào tunnel, đó là trường hợp gương, nơi hồ sơ tách rời phải mang một đích và để phần còn lại ở cục bộ. Với tới nó ở đây bảo đảm lưu lượng bạn muốn giữ bên ngoài sẽ đi vào trong.

Dạng thủ công là một lệnh duy nhất. Điểm yếu của nó là thay đổi mạng chứ không phải kết nối lại.

route -p add 198.51.100.30 mask 255.255.255.255 10.0.0.1 metric 1 if 7

Nó sống qua lần khởi động lại nhờ -p và gửi một địa chỉ ra khỏi giao diện 7 trong khi tunnel mang mọi thứ còn lại. Chuyển máy tính sang mạng khác thì cả cổng lẫn chỉ số đều cũ đi, nên mục này thất bại trong im lặng. Ghi lại ai sở hữu nó và khi nào nên gỡ.

Script kết nối là phiên bản chắc chắn hơn, vì nó thêm lại ngoại lệ sau mỗi lần kết nối thay vì hy vọng mục đó sống sót. Hai dòng bên dưới thuộc về thứ khởi động tunnel, không phải script đăng nhập.

rasdial Office
route add 198.51.100.30 mask 255.255.255.255 10.0.0.1 metric 1 if 7

Bất cứ thứ gì đưa tunnel lên là chỗ đúng cho dòng thứ hai, và rasdial chỉ trả về khi kết nối đã được thiết lập, nên tuyến rơi vào sau các mục của chính bộ điều hợp. Chạy lại sau khi máy thức dậy, vì tạm dừng có thể làm rơi tuyến và để tunnel vẫn bật. Nếu công việc là ngược lại, đẩy một tiền tố vào tunnel trong khi phần còn lại ở cục bộ, thì Add-VpnConnectionRoute là công cụ đúng.

Định tuyến không thể chọn tiến trình

Đôi khi yêu cầu hẹp hơn một đích: một chương trình nên đi đường cục bộ trong khi mọi thứ khác ở trong tunnel. Định tuyến không thể diễn đạt điều đó, vì nó khớp địa chỉ chứ không khớp tiến trình. Mẫu khả thi đẩy vấn đề vào trình khởi chạy.

Giữ hồ sơ ngoài tuyến mặc định và khởi chạy riêng chương trình đó gắn với địa chỉ giao diện cục bộ, thế là ngoại lệ trở thành lệnh khởi chạy và tunnel giữ những gì nó vốn đang xử lý. Không có gì trong bảng định tuyến thay đổi, đó là lý do cách này sống qua các lần kết nối lại. Nó cũng có nghĩa tunnel không được sở hữu tuyến mặc định ngay từ đầu, nên đây là một thiết kế khác chứ không phải bản vá cho thiết kế trước.

Điểm yếu của nó là vận hành chứ không phải kỹ thuật. Chương trình phải luôn khởi chạy qua lớp bọc, và nếu thiếu ràng buộc sau khi thức dậy, nó lặng lẽ lấy bất kỳ đường nào bảng đưa ra. Điều đó chấp nhận được với trình duyệt bạn cố ý mở và không chấp nhận được với bất cứ thứ gì không bao giờ được rời tunnel.

Kết nối theo từng người dùng cũng không giải quyết được điều này. Windows có thể giới hạn một kết nối cho một tài khoản trong khi bảng định tuyến vẫn của toàn máy, nên kết nối giới hạn theo tài khoản đang giữ tuyến mặc định vẫn chuyển hướng mọi tiến trình trên máy, kể cả các phiên khác. Phạm vi chỉ trở thành thật khi phạm vi tuyến khớp với tài khoản. Hai người dùng chung một máy tính xách tay vì thế dùng chung một bảng, và người thứ hai thừa hưởng bất kỳ tunnel nào người thứ nhất đã khởi động.

Xác nhận ngoại lệ sống sót qua một lần kết nối lại

Kiểm tra thay đổi theo cách nó sẽ thất bại: ngắt kết nối, kết nối lại, mở một ứng dụng mới, rồi yêu cầu một địa chỉ phải ở cục bộ và một địa chỉ phải dùng tunnel. So sánh cả hai với Find-NetRoute ở trạng thái đã kết nối.

Nếu tiền tố mất khỏi bảng sau khi kết nối lại, nó sống trong đối tượng sai chứ không phải định dạng sai. Chuyển nó sang giao diện vật lý và lặp lại bài kiểm tra. Giữ cả hai đầu ra lệnh cùng bản ghi thay đổi, vì ảnh chụp trạng thái đang chạy trả lời nhiều câu hỏi về sau hơn một đoạn giải thích. Người tiếp theo sẽ muốn biết việc kết nối tạo ra gì, chứ không phải bạn định nó tạo ra gì.

Bài viết liên quan