[Homelab] #12 Link-local IPv6, Wireguard và một chút buồn... cười
Trước giờ thì việc không truy cập LAN khi bật VPN Wireguard luôn là vấn đề nan giải với mình. Và đã thử qua nhiều cách khác nhau để giải quyết việc này. Một trong những cách là sử dụng Cloudflared để Forward traffic từ VPS đi. Và cái đấy thì phải cài bên VPS, trong khi bản thân lại ngồi kế bên cái máy. NGỒI KẾ BÊN CÁI MÁY XONG ĐỂ NÓ ĐƯA TRAFFIC INTERNET ĐI HƠN NỬA VÒNG TRÁI ĐẤT RỒI QUAY LẠI. Không chịu cũng phải chịu vì mình cần điều đó.
Mới trưa nay thôi, trong lúc làm wg-easy rồi tức ói máu với nó. Vì phải tìm hiểu một cái mới. Rồi phải làm liên tục tù tì 5 cái Docker như vậy cho 5 cái IP Public (thật ra chỉ có 4) sau khi gửi ticker lên bên nhà cung cấp thì mới rõ thực hư, rồi người ta cấp lại. Và cái việc làm wg-easy với Docker nó thực sự là một cực hình nếu như phải cấu hình port forward đi để có thể kết nối Wireguard. Mình thực sự không muốn hiểu về nó tí nào cả.
Mấu chốt là khi đang bật Wireguard, thì mình ấn vào Master-1 trong RDCMan, thì nó lại connect được? Trong khi thực tế buộc phải sử dụng một IP forward mới làm được điều đó? Thế nên mình thực hiện
ping Master-1
Thì nó hiện một IP rất lạ, một IPv6
Theo tìm hiểu thì nó là Link-local IPv6
Link-local IPv6 là gì?
Link-local IPv6 là dải địa chỉ IPv6 nằm trong phạm vi fe80::/10, được tự động gán cho mọi interface mạng và hoạt động trong Layer 2. Nó luôn tồn tại, không cần cấu hình thủ công hay DHCP, và được dùng để giao tiếp cơ bản giữa các thiết bị trong cùng mạng.
Tại sao Link-local IPv6 lại pass được Wireguard dù nó đã route 0.0.0.0/0 lẫn ::/0
Do thứ này hoạt động ở Layer 2, không nhất thiết đi ra Internet. Còn Wireguard lại hoạt động ở Layer 3.
Một vài rắc rối trong quá trình tìm hiểu
Thứ này nếu connect vào Windows với nhau buộc phải cấu hình tường lửa. Vấn đề này xảy ra khi chỉ có cái máy Master-1 thì Ping ICMPv6 được, lẫn RDP vào được còn máy Master-2 và các máy còn lại nếu bật Wireguard thì tèo. Một tư duy khiến mình nghĩ rằng. Nếu như đã có cái này pass được rồi, tức là có tiền lệ. Vậy thì tại sao dải mạng IPv4 Local cũng bị nó nuốt mất? Vấn đề được giải quyết đơn giản nhờ việc ấn vào một nút trên Wireguard
Block untunnel traffic (kill-switch)
Chỉ cần không bật tick phần đó. Các AllowedIPs sẽ chuyển thành hai dải 0.0.0.0/1 và 128.0.0.0/1 thay vì 0.0.0.0/0 Căn bản mình thấy hai cái này nó như nhau nên lúc trước cũng không nghĩ nhiều. Thêm vào đó nữa là lúc trước cũng có thử tắt tick một lần rồi, mà vẫn không connect local được nên mình để nguyên si luôn. Đôi lúc nghĩ ra được giá như chỉ cần biết thì có cần phải nghĩ ra giải pháp đủ thứ linh tinh như việc tạo Docker lu xu bu như thế này rồi cho FORWARD các thứ, mạng chạy được vào trong LAN. Đặt luật cho các Docker để dễ quản lý. Thậm chí nghĩ đến việc Scale qua K8S luôn, mà thực tế chỉ cần bấm untick cái thôi. Đời này hài thật
Nhiều lúc nghĩ cũng vãi chưởng. Cũng không phải một mình bị, có một ông trên reddit cũng bị vấn đề tương tự, và giải pháp của ổng là chọn 1 đống dải IP sau khi chọn 1 nửa Internet. 0.0.0.0/1 kèm 1 đống dải nữa. Và ổng cũng thừa nhận rằng việc bật 0.0.0.0/0 thì sẽ không còn truy cập được LAN nữa. Giải pháp bên dưới cũng nói tương tự. Thật là vãi chưởng ạ. Cả cái vấn đề Mesh của Tailscale cũng được giải quyết luôn. Ôi thật là, chỉ biết cười.
Mà nghĩ lại cũng hay, nếu như mà lúc đó dễ đến vậy thì đến nay có khi không có bài này, cũng không có kỹ năng dùng Docker, cũng chẳng có Proxmox. Thôi thì tích cực một chút.
All rights reserved