前言
我經常使用 Linux 的 IPv6 轉發功能,但是我發現如果我是透過接收 RA 通告來獲得 IPv6 位址的話,當我啟用轉發之後,機器就不會繼續接收 RA 了,所以花了一些時間來找找原因,並記錄在這裡。
accept_ra
你可能在設定 sysctl 的時候看過這樣的參數,這代表了我會在所有介面卡都接收 RA 通告,當然你也可以把 all 改成特定的網路介面卡。
net.ipv6.conf.all.accept_ra = 1
但這個 accept_ra 參數除了 0 跟 1 之外,其實還有 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