2020-05-03 | UNLOCK

避免家中的Linux主機在重啟後失去與網絡世界的連結的嘗試

前一篇關於奈飛DNS解鎖的文章中提到,我在執行reboot指令後,家中的樹莓派突然失聯了。這次回家修復後我做了幾個預防措施,避免日後再次發生同樣的事故。

Methods

以下操作均是在重裝系統以乾淨的OS進行的。

1. 保持默認ssh端口

為了避免重開機後自定義端口的設置沒有生效,這次我讓ssh保持默認的端口,並設置路由器NAT將外網30000端口映射到內網樹莓派的22端口,實現外網非標端口訪問。

2. 卸載cloud-init

Ubuntu 18.04版本開始用netplan取代/etc/network/interface管理網絡界面,在/etc/netplan/50-cloud-init.yaml有這樣一段話。

This file is generated from information provided by
the datasource. Changes to it will not persist across an instance.
To disable cloud-init’s network configuration capabilities, write a file
/etc/cloud/cloud.cfg.d/99-disable-network-config.cfg with the following:
network: {config: disabled}

意思是如果要避免netplan在重開機被洗掉應該調整cloud-init或乾脆卸載它。我上次就是這樣被雷了,這次當然是果斷卸載。這貨具體用途我沒有去查,不過它會讓ubuntu的開機時間增加1分鐘以上,網絡上大部分的教程都推薦直接卸載。

1
2
3
4
echo 'datasource_list: [ None ]' | sudo -s tee /etc/cloud/cloud.cfg.d/90_dpkg.cfg
sudo apt-get purge cloud-init
sudo rm -rf /etc/cloud/
sudo rm -rf /var/lib/cloud/

順便放上我的50-cloud-init.yaml內容供參考

1
2
3
4
5
6
7
8
9
network:
ethernets:
eth0:
dhcp4: no
addresses: [192.168.100.36/24]
gateway4: 192.168.100.1
nameservers:
addresses: [192.168.100.1, 1.1.1.1]
version: 2

3. 開機自動重啟netplan

增加一個root用戶的crontab任務

1
@reboot /usr/sbin/netplan apply

4. IPv6 DDNS

我發現樹莓派在netplan沒有起作用的時候就能獲得公網IPv6地址,而且IPv6公網地址不需要在網關設置端口映設就能直接從公網訪問(突然驚覺這就是IPv6的時性,果然實踐出真知)。所以我設定了一個定時任務,和IPv4 DDNS一樣每隔五分鐘就自動更新Pi的IPv6 AAAA Record,萬一IPv4掛了還能從IPv6連回去修。
~/scripts/ipv6_aaaa.sh

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#!/bin/bash

ip6=$(ip addr show dev eth0 | sed -e's/^.*inet6 \([^ ]*\)\/.*$/\1/;t;d' | head -n 1)
zoneid="XXXX"
recordid="XXXX"
apikey=XXXX"
subdomain="blog-v6.example.com"

curl -X PUT "https://api.cloudflare.com/client/v4/zones/${zoneid}/dns_records/${recordid}" \
-H "Authorization: Bearer ${apikey}" \
-H "Content-Type:application/json" \
--data "{\"type\":\"AAAA\",\"name\":\"${subdomain}\",\"content\": \"${ip6}\",\"proxied\": false}"

exit 0

crontab任務

1
*/5 * * * * ~/scripts/ipv6_aaaa.sh >/dev/null >/dev/null

Conculsion

我在Pi上設置有每天早上自動檢查服務器是否被牆並通過Telegram BOT發送結果的腳本,在服務器失聯後腳本依然正常運行,代表Pi還是可以與公網溝通的,只是IPv4的綁定出了問題,我才意識到自動恢復的可行性和運維的重要(突然官腔)。在這次失聯事件後突然體會到VPS的服務價值,至少服務器掛掉後能有人幫你重開機。如果家裡沒有其他能幫你排錯的人(等同無人值守),一定要確保所有開機自啟服務運作正常,能上的保險措施盡量上,畢竟這種情況下家人能幫你做到的運維極限只有拔線重插,只有開機自啟任務能救。

References

評論加載中