Chuyển máy chủ VPN sang IP công cộng mới: cần kiểm tra gì trước
Thay tại chỗ và chuyển song song hỏng ở những chỗ khác nhau. Rà cấu hình, NAT và chứng chỉ, rồi xem mỗi máy khách phân giải tên như thế nào.
Gán lại một địa chỉ mất một phút. Tuần sau mới là nơi việc chuyển đi hỏng, và hiếm khi ở chỗ bảng điều khiển của nhà cung cấp gợi ý. Một IP công cộng mới được tham chiếu ở bốn nơi: socket mà daemon lắng nghe, mỏ neo tin cậy mà máy khách xác minh, mọi quy tắc nêu địa chỉ cũ, và bản ghi DNS nối chúng lại. Hai kiểu chuyển trông giống nhau từ bảng điều khiển nhưng hành xử hoàn toàn khác: gán lại địa chỉ trên máy bạn vận hành, hoặc dựng endpoint thứ hai và chuyển máy khách sang đó. Các kiểm tra dưới đây đặt những lỗi rẻ tiền lên trước, và mỗi phần ghi rõ nó áp dụng cho kiểu chuyển nào.
Thay tại chỗ và chuyển song song là hai công việc khác nhau
Thay tại chỗ giữ nguyên máy chủ, khóa, bảng định tuyến và danh sách người dùng; chỉ địa chỉ thay đổi. Đó là việc gán lại một IP động, và ở nhiều nhà cung cấp khách không hề nhận ra, vì việc dịch địa chỉ diễn ra trước phiên bản. Dựng lại hoặc để nhà cung cấp gán lại thì khắc nghiệt hơn: khách thấy thay đổi, và mọi thứ đã lưu giá trị cũ trong bộ nhớ đệm biết điều đó ngay lập tức.
Endpoint song song là máy chủ thứ hai làm cùng công việc. Hãy dựng nó, thử bằng một hồ sơ, và để cái cũ tiếp tục trả lời cho đến khi cái mới chứng minh được mình trên một đường đi thật. Cái giá là trạng thái. Không có mục peer, thu hồi và ghi log dùng chung, bạn có hai mạng tình cờ trùng tên.
| Question | In-place swap | Parallel endpoint |
|---|---|---|
| Rollback in one step? | Only if you can get the old address back | Point DNS back; old host still up |
| Blast radius | Every client at once | Only the clients you moved |
| Best when | The address is yours to reassign | The old address is gone for good |
Tìm mọi nơi địa chỉ cũ được ghi lại
Bắt đầu bằng quét văn bản, vì tệp cấu hình là nửa dễ. Tìm trong cấu hình daemon, các mảnh tường lửa, mục tiêu giám sát và bất kỳ gói máy khách nào được tạo trên đĩa. Bao gồm cả địa chỉ IPv6 nếu bạn công bố một địa chỉ; một lần chuyển chỉ theo bản ghi A sẽ để máy khách hai chồng ở lại đường cũ.
OLD=203.0.113.10
grep -RIn -- "$OLD" /etc /root
ss -lunpt | grep -F "$OLD"
nft list ruleset | grep -F "$OLD"
iptables-save | grep -F "$OLD"
wg show all endpoints
Sau đó quét nhân, vì hệ thống đang chạy giữ địa chỉ ở những nơi không tệp nào nhắc tới. Một quy tắc NAT nguồn tĩnh, một mục ipset, một địa chỉ bind và một mục conntrack sống lâu hơn lần sửa cấu hình đã xóa chúng, và một số còn sống qua lần khởi động lại vì chúng quay về từ bộ quy tắc đã lưu. Cao hơn một tầng, nhóm bảo mật của nhà cung cấp, mục tiêu cân bằng tải và kiểm tra giám sát hoàn toàn không nằm trên hệ thống tệp của bạn.
Ghi bảng kiểm kê trước khi thay đổi bất cứ thứ gì; nó cũng dùng làm kịch bản hoàn tác.
Máy khách dùng tên máy chủ tự phục hồi; máy khách dùng IP nguyên văn im lặng
Nếu máy khách đến máy chủ qua tên máy chủ, việc chuyển chủ yếu là vấn đề DNS, và TTL bạn đặt hôm qua quyết định nó tệ đến đâu. Trình phân giải lưu đệm, trình phân giải stub lưu đệm thêm lần nữa, và nhiều máy khách chỉ tra tên khi có kết nối mới, nên một đường hầm đã lập vẫn giữ địa chỉ ban đầu.
Nếu endpoint là địa chỉ nguyên văn, không gì phân giải lại và không gì ghi nhận phàn nàn. WireGuard lưu địa chỉ socket đã phân giải: Endpoint = vpn.example.net:51820 trở thành IP ngay khi wg-quick up chạy và giữ nguyên IP đó cho đến khi bạn đổi. OpenVPN dễ chịu hơn: nó phân giải tên máy chủ remote lúc kết nối và, với resolv-retry infinite, thử lại DNS khi kết nối lại. Với IP nguyên văn, cả hai vẫn gọi một cỗ máy không còn tồn tại.
Điều đánh lừa người ta là hình ảnh trong gương. Một máy khách đã trỏ tới địa chỉ mới, trong khi trình lắng nghe cũ vẫn trả lời, sẽ vượt qua mọi bài kiểm tra bạn làm từ bàn của mình. Tôi cũng từng bị lừa: endpoint mới lên trên điện thoại ngay lần đầu, còn một máy khách với hồ sơ cũ chỉ lộ ra khi trình lắng nghe cũ bị tắt rất lâu sau đó.
Niềm tin không di chuyển cùng địa chỉ
WireGuard tách danh tính khỏi khả năng tiếp cận, khiến việc chuyển địa chỉ gần như miễn phí. Các peer được nhận diện bằng khóa công khai, và endpoint chỉ là nơi gói tin đang đi tới; máy chủ cập nhật endpoint của peer từ địa chỉ nguồn của gói đã xác thực gần nhất. Một peer nhàn rỗi vẫn cần lý do để nói chuyện với nơi mới, và nó chỉ học địa chỉ khi phiên hết hạn và các lần thử handshake thất bại ở một nơi nhìn thấy được. Hướng dẫn nhanh WireGuard đề cập trường endpoint.
Máy chủ dựa trên TLS là trường hợp ngược lại. Chứng chỉ gắn với một tên, và máy khách quay số tới một địa chỉ sẽ so địa chỉ đã quay với các tên thay thế của chủ thể. Kết nối bằng IP tới chứng chỉ chỉ mang SAN DNS và việc xác minh thất bại: tên máy khách dùng không có trong chứng chỉ. Phát hành lại với SAN IP sửa được kết nối đó và làm lần chuyển sau tệ hơn. Giữ tên máy chủ trong hồ sơ và để verify-x509-name nguyên chỗ giữ kiểm tra nghiêm ngặt trong khi địa chỉ bên dưới thay đổi.
Sau đó kiểm tra daemon bị ràng buộc vào đâu; một socket ghim vào địa chỉ cũ sẽ thất bại âm thầm. Máy chủ OpenVPN khởi động với local 203.0.113.10 từ chối khởi động khi địa chỉ đó biến mất, trong khi trình lắng nghe trên 0.0.0.0 đi theo thay đổi miễn phí. NAT cũng tách theo cách đó: MASQUERADE đi theo bất kỳ địa chỉ nào máy đang có, và SNAT --to-source 203.0.113.10 tĩnh tiếp tục ghi lại về một địa chỉ bạn không còn sở hữu, nên lưu lượng hồi về biến mất. Nếu địa chỉ mới đi kèm một cổng upstream khác, hãy kiểm tra rp_filter: lọc đường đi ngược bỏ lưu lượng hồi về đến trên một giao diện mà nhân không lường trước.
Thứ tự chuyển và bằng chứng nó đã hoạt động
Hạ TTL trước một ngày, dựng trình lắng nghe mới, và chứng minh nó bằng một hồ sơ chỉ bạn có. Một bài thử từ bên trong cùng mạng gần như không chứng minh được gì, nên hãy dùng điện thoại trên mạng di động và thử thứ mà đường hầm phải mang, thay vì ping tới endpoint.
Theo dõi cả hai địa chỉ suốt cửa sổ. wg show all latest-handshakes trên máy chủ mới, hoặc tệp trạng thái OpenVPN, cho biết bao nhiêu peer đã thực sự di chuyển. Khi endpoint mới có những peer bạn mong đợi và cái cũ chỉ còn những kẻ tụt lại, hãy cho trình lắng nghe cũ nghỉ, gỡ quy tắc NAT lỗi thời và bỏ địa chỉ khỏi tường lửa của nhà cung cấp. Gỡ trình lắng nghe cũ là bước bị bỏ qua, và nó đóng lại khoảng trống nơi một hồ sơ cũ vẫn chạm tới mạng cũ.
Ghi rõ ngưỡng hoàn tác trước khi bắt đầu: nếu sau cửa sổ đã thống nhất mà endpoint mới không có handshake từ một máy khách thật nào, hãy khôi phục địa chỉ cũ và ngừng phát hồ sơ. Chạy lại quét sau đó và xác nhận không còn trình lắng nghe nào gắn với địa chỉ đã rút. Hai thứ được mang sang lần chuyển sau: một tên máy chủ trong hồ sơ máy khách để thay đổi tiếp theo chỉ là sửa DNS, và bảng kiểm kê được lưu bên cạnh ghi chú phục hồi của máy chủ.