RHEL 9 與 WireGuard
有別於先前的 RHEL/CentOS 7/8,這回 RHEL 9 因為 Linux 內核版本較新(5.14)的緣故,已內建對於 WireGuard 的支援。而無須再找尋第三方套件庫,或者是得動手自行編譯模組。所以同樣的支援狀態也適用於 RHEL 的複製品,如 AlmaLinux 及 Rocky Linux 等。
話說 DR 打算利用一部放置在 Amazon EC2 上的 RHEL 9 主機,作為備用的 VPN 伺服器。於是便參照以往在 CentOS 7 及 CentOS Stream 8 上的作業流程來進行設定。其中因為系統已內建 wireguard 模組的緣故,因此已無須再自行安裝模組。然而卻在設定完畢後,遇到了一個問題:WireGuard 客戶端連接伺服器正常,但各個客戶端彼此是無法通訊的。倘若客戶端之間嘗試互 ping,會從伺服器端出現「Packet filtered」的結果。
看起來像是被伺服器防火牆擋住了,但比對防火牆設定的內容,卻是看不出問題來,都是沿用先前有效的設定。於是在網路上搜尋了一陣,找到 Red Hat Bugzilla – Bug 2029211 裡的討論。發現主要的差異,是在於 firewalld 防火牆工具自 v1.0.0 以後的變化(Default target is now similar to reject),禁止了以往會被許可的連線。對此情形,有不只一種調整方式,而其中一種可行的解法,是將 WireGuard 網路介面(例如 wg0)加入到 trusted 區域中:
- firewall-cmd --permanent --zone=trusted --add-interface=wg0
- firewall-cmd --reload
在 WireGuard 伺服器上執行前述指令後,所連接的客戶端就能夠彼此通訊了,而本站的 How-To 文件也已做相應的補充。總結來說,firewalld v1.0.0 算是重大改版,其實在 RHEL 9 發佈以前,已經有先出現在 Fedora 35 上(見 Changes/firewalld-1.0.0)。不過雖然 DR 自己也是 Fedora 使用者,但因為主要是桌面系統的用途,所以恐怕也是沒什麼機會能夠預先發覺到此問題。