Linux 啟用 IPv6 轉發時繼續接收 RA 通告

前言

我經常使用 Linux 的 IPv6 轉發功能,但是我發現如果我是透過接收 RA 通告來獲得 IPv6 位址的話,當我啟用轉發之後,機器就不會繼續接收 RA 了,所以花了一些時間來找找原因,並記錄在這裡。

accept_ra

你可能在設定 sysctl 的時候看過這樣的參數,這代表了我會在所有介面卡都接收 RA 通告,當然你也可以把 all 改成特定的網路介面卡。

net.ipv6.conf.all.accept_ra = 1

但這個 accept_ra 參數除了 01 之外,其實還有 2 這個參數,我把分別的作用寫在下方。

參數 說明
0 不接收 RA 通告。
1 接收 RA 通告。
2 在開啟 IPv6 轉發時,也接收 RA 通告。

對,我之前就是沒有發現有 2 這件事情,所以才找了一下。

完整設定

所以這下你應該在 /etc/sysctl.conf 或是 /etc/sysctl.d/ 底下的檔案這樣設定,就可以讓啟用 IPv6 轉發的同時,也接收 RA 通告囉。

net.ipv6.conf.default.forwarding = 1
net.ipv6.conf.all.accept_ra = 2

接著讓系統讀取一次就可以囉。

sudo sysctl --system