Mọi báo cáo này nghe giống nhau và mang nghĩa khác nhau: chiếc laptop phàn nàn về xung đột địa chỉ, nhưng chỉ thỉnh thoảng, và chủ yếu khi VPN đang bật. Ba lỗi riêng biệt tạo ra thông báo đó: một bản trùng thật trên đường liên kết của chính bạn, một chỗ chồng lấn nơi mạng từ xa dùng dải LAN của bạn và không có gì bị trùng cả, và một tunnel đã cấp một địa chỉ cho hai peer. Cách sửa khác nhau trong từng trường hợp, và cách sai sẽ di chuyển triệu chứng thay vì loại bỏ nó. Vì vậy hãy xác định bạn thuộc trường hợp nào trước khi sửa bất cứ thứ gì.

Ba lỗi cùng một thông báo lỗi

Bản trùng nghĩa là hai máy trên cùng một segment cùng đòi một địa chỉ. Nhân hệ điều hành nhận ra vì câu trả lời cho phép dò của chính nó đến từ một MAC khác, và điều gì xảy ra tiếp theo phụ thuộc vào stack: Linux ghi log, Windows tắt interface và ghi một mục vào log hệ thống, còn client DHCP có thể từ chối đề nghị.

Chồng lấn không trùng địa chỉ nào cả. LAN của bạn là 192.168.1.0/24, mạng văn phòng cũng là 192.168.1.0/24, và giờ tuyến đến văn phòng trỏ tới những địa chỉ cũng chính là máy in và NAS của bạn. Không có gì xung đột theo nghĩa ARP; gói tin chỉ đơn giản đi đến thiết bị sai trên một trong hai mạng.

Va chạm trong pool là lỗi của chính tunnel. Hai peer được cấu hình hoặc được gán cùng một địa chỉ tunnel, nên máy chủ không thể phân biệt chúng khi gửi lưu lượng trả về. Một trong hai client thấy handshake hoạt động mà không có dữ liệu, trông như lỗi định tuyến nhưng không phải.

Kiểm tra 1: bản trùng có nằm trên segment của chính bạn?

Hãy bắt đầu bằng việc liệt kê những gì máy bạn thực sự có, không phải những gì bạn nhớ đã cấu hình. Địa chỉ của adapter VPN là riêng cho tunnel và không giống địa chỉ mà các trang web nhìn thấy, nên một đầu ra công khai dùng chung không phải là xung đột.

ip -br addr
ip neigh
ip route show table all | grep -E 'wg|tun|ppp'

Trên Windows, thông tin tương tự đến từ ipconfig /all và Get-NetIPAddress, với bộ nhớ đệm láng giềng trong arp -a. Nếu địa chỉ đang tranh chấp nằm trên adapter vật lý và lời phàn nàn xuất hiện khi VPN không chạy, thì VPN chỉ là người ngoài cuộc và bạn nên ngừng chẩn đoán nó.

Để chứng minh một bản trùng thay vì đoán, hãy dò địa chỉ từ một thiết bị không sở hữu nó. arping -D gửi phép dò với địa chỉ nguồn bằng không, nên một câu trả lời từ MAC không mong đợi chứng minh rằng một host khác đã trả lời cho địa chỉ đó.

sudo arping -D -I eth0 -c 3 192.168.1.50

Sau đó tìm chủ sở hữu qua quản trị viên mạng thay vì tự chọn một địa chỉ khác. Các gán tĩnh chỉ nằm trong ghi chú của ai đó, máy in có địa chỉ cố định và các đặt trước trên máy chủ DHCP là những thủ phạm thường gặp, và một thiết bị đã tắt vẫn sở hữu lease của nó.

Kiểm tra 2: hai mạng có chồng lấn không?

So sánh tiền tố mà tunnel cấp cho bạn với các tiền tố trên interface của chính bạn. Nếu dải từ xa bằng hoặc chứa LAN của bạn, lỗi là chồng lấn, và dấu hiệu tố cáo là một host truy cập được khi không có VPN bỗng tối đi, hoặc máy in của bạn trả lời trên một địa chỉ văn phòng.

ip route get 192.168.1.10
ip -br addr show

Tra cứu tuyến cho bạn biết nhân hệ điều hành sẽ dùng interface nào, và câu trả lời đó chính là toàn bộ chẩn đoán. Nếu nó chỉ tunnel cho một địa chỉ thuộc máy in cục bộ của bạn, bạn có chồng lấn và không lượng gia hạn lease nào thay đổi được điều đó.

Có ba lối ra trung thực, và thường chỉ một lối là khả dụng với bạn. Phía từ xa có thể masquerade lưu lượng cho subnet chồng lấn, để client của bạn chỉ thấy địa chỉ tunnel của máy chủ. Tunnel có thể mang một tiền tố từ xa hẹp hơn không va chạm với LAN của bạn. Hoặc client có thể định tuyến theo địa chỉ nguồn bằng các quy tắc chính sách, cách này hoạt động nhưng mong manh và khó chuyển giao cho đồng nghiệp.

Đánh số lại mạng văn phòng hiếm khi là quyết định của bạn. Đánh số lại LAN của chính bạn để né va chạm là thay đổi lớn hơn hầu hết mọi người tưởng khi đã có máy in, camera và host tĩnh tham gia.

Kiểm tra 3: tunnel có cấp một địa chỉ hai lần không?

WireGuard không có pool địa chỉ. Mỗi peer được nhận diện bằng khóa công khai của nó và bằng các tiền tố trong AllowedIPs, nên một bản trùng xuất hiện khi cùng một địa chỉ tunnel được ghi vào hai mục peer hoặc cùng một cặp khóa được cài trên hai máy.

wg show all allowed-ips
wg show wg0 latest-handshakes
wg show wg0 transfer

Bộ đếm lưu lượng là cột hữu ích ở đây: một peer có handshake gần đây nhưng không có truyền tải thì hoặc bị đánh địa chỉ sai hoặc bị mục khác đòi cùng tiền tố che khuất. Hãy đặt tiền tố trên đúng một peer và cấp cho mỗi thiết bị cặp khóa riêng.

OpenVPN có pool, và va chạm phổ biến là một hồ sơ client dùng chung với dòng --ifconfig cố định được sao chép sang máy thứ hai. Cả hai client sau đó yêu cầu cùng một địa chỉ tunnel, và máy chủ chấp nhận phiên nào nó xử lý trước. Cạn pool với --duplicate-cn tạo ra kết quả tương tự khi nhiều phiên của một chứng chỉ tranh nhau một mục.

Hãy đọc log máy chủ thay vì log client cho việc này. Máy chủ biết phiên nào đã đòi địa chỉ nào, và các địa chỉ lặp lại ở đó hiện ra dưới dạng cảnh báo không bao giờ đến được client.

Sửa tại nguồn, rồi kiểm tra lại cả hai thiết bị

Thứ tự rất quan trọng. Trước tiên sửa bản trùng trên LAN, vì một client không giữ được địa chỉ thì cũng không giữ được tunnel. Sau đó sửa việc cấp phát ở phía VPN, vì chỉnh sửa phía client đối với một gán từ pool sẽ bị hoàn tác ở lần kết nối tiếp theo. Cuối cùng xử lý danh tính trùng: cặp khóa riêng trên WireGuard, chứng chỉ riêng hoặc ít nhất hồ sơ riêng trên OpenVPN.

Ở client, phần cơ học rất ngắn. Hãy giải phóng và gia hạn lease DHCP, hoặc yêu cầu đổi địa chỉ trên máy chủ cho một đặt trước. Đừng gõ một địa chỉ ngẫu nhiên trông có vẻ trống.

sudo dhclient -r eth0 && sudo dhclient eth0
ipconfig /release && ipconfig /renew

Sau đó kiểm tra từ cả hai đầu, không phải một đầu. Xác nhận gateway, rồi dịch vụ bạn thực sự cần, rồi kết nối lại và lặp lại. Nếu có hai thiết bị tham gia, hãy kiểm tra cả hai: di chuyển một địa chỉ để thiết bị kia với các mục láng giềng cũ hoặc một lease cũ sẽ xuất hiện lại sau này.

Những gì không nên làm trên đường

Đừng làm im triệu chứng. Việc phát hiện địa chỉ trùng chính là thứ ngăn bạn lấy một địa chỉ đã được dùng, và tắt nó biến một xung đột nhìn thấy được thành mất gói không liên tục khó truy vết hơn nhiều. Điều tương tự áp dụng cho việc chấp nhận cảnh báo chứng chỉ từ một host không mong đợi: đó hoàn toàn không phải vấn đề địa chỉ, và bấm bỏ qua nó che giấu một lỗi khác.

Cũng đừng tự đổi cách đánh địa chỉ của một mạng được quản lý. Ghi lại thiết lập ban đầu, hỏi chủ sở hữu khi địa chỉ được cấp tập trung, và giữ thay đổi đủ nhỏ để có thể hoàn tác. Các quy tắc phát hiện xung đột địa chỉ RFC 5227 giải thích một phép dò đúng chứng minh điều gì, điều đáng biết trước khi bạn coi một xung đột là thật.

Bài viết liên quan