2020年4月10日 星期五

在Raspberry Pi 2B上跑Docker, AdguardHome, Bitwarden, RPi-Monitor

在Raspberry Pi 2B上跑Docker, AdguardHome, Bitwarden, RPi-Monitor

請先參考前置準備工作
安裝Raspberry Pi 2B 來跑docker 前置準備

安全性考量, 移除預設pi帳號

Ref :
    https://www.raspberrypi.org/documentation/linux/usage/users.md
    https://www.raspberrypi.org/documentation/configuration/security.md

新增user, 移除預設pi
假設新user是homesrv
# Add new user homesrv, and setup homesrv to sudo group
sudo adduser homesrv
sudo adduser homesrv sudo
sudo usermod -a -G adm,dialout,cdrom,sudo,audio,video,plugdev,games,users,input,netdev,gpio,i2c,spi alice

# Kill all process run with pi, and then remove pi
sudo pkill -u pi
sudo deluser -remove-home pi

安裝docker

Ref : https://withblue.ink/2019/07/13/yes-you-can-run-docker-on-raspbian.html

To install Docker CE on Raspbian Stretch and Buster:

# Install some required packages first
sudo apt update
sudo apt install -y \
     apt-transport-https \
     ca-certificates \
     curl \
     gnupg2 \
     software-properties-common

# Get the Docker signing key for packages
curl -fsSL https://download.docker.com/linux/$(. /etc/os-release; echo "$ID")/gpg | sudo apt-key add -

# Add the Docker official repos
echo "deb [arch=armhf] https://download.docker.com/linux/$(. /etc/os-release; echo "$ID") \
     $(lsb_release -cs) stable" | \
    sudo tee /etc/apt/sources.list.d/docker.list

# Install Docker
# The aufs package, part of the "recommended" packages, won't install on Buster just yet, because of missing pre-compiled kernel modules.
# We can work around that issue by using "--no-install-recommends"
sudo apt update
sudo apt install -y --no-install-recommends \
    docker-ce \
    cgroupfs-mount

#starting Docker and enabling it at boot:
sudo systemctl enable docker
sudo systemctl start docker

#Test docker, it should show "Hello from Docker !"
sudo docker run --rm arm32v7/hello-world

#Installing Docker Compose
# Install required packages
sudo apt update
sudo apt install -y python3-pip libffi-dev

# Install Docker Compose from pip (using Python3)
# This might take a while
sudo pip3 install docker-compos


安裝Adguardhome

Ref : https://github.com/AdguardTeam/AdGuardHome/wiki/Raspberry-Pi

# download AdGuard Home and unpack it
cd $HOME
wget https://static.adguard.com/adguardhome/release/AdGuardHome_linux_arm.tar.gz
tar xvf AdGuardHome_linux_arm.tar.gz

# install AdguardHome
cd AdGuardHome
sudo ./AdGuardHome -s install

# start service
sudo ./AdGuardHome -s start

# check web interface, default port is 3000
http://192.168.0.2:3000/

安裝bitwardenrs

Ref :
    https://github.com/dani-garcia/bitwarden_rs/wiki/Which-container-image-to-use
    https://github.com/dani-garcia/bitwarden_rs/wiki/Starting-a-Container

# 因為我是用pi 2b, 所以image要用bitwardenrs/server:raspberry
# 建立一個資料夾, 讓bitwarden去掛載來存放資料
# bitwarden port預設是80/443, 可以透過-p 去做mapping, 這邊我們假設mapping到9999<>80
# restart policy, 我是選用, 會自動重啟, 但是如果超過10次fail, 就停止restart
# 也可以替換為, --restart=always, --restart=unless-stopped
# Docker restart policy, Ref : https://www.centos.bz/2017/01/docker-run-restart-policy/
mkdir /home/homesrv/bitwarden/
docker run -d --restart=on-failure:10 --name bitwarden -v /home/homesrv/bitwarden/:/data/ -p 9999:80 bitwardenrs/server:raspberry

安裝RPi-Monitor

Ref :
    https://atceiling.blogspot.com/2019/04/raspberry-pi-47-rpi-monitor.html
    https://www.leowkahman.com/2016/03/19/disable-ipv6-raspberry-raspbian/

安裝RPi-Monitor
# RPi-Monitor 使用https的方式下載安裝,apt-get 預設不支援https,需要安裝 RPi-Monitor的公鑰來信任 RPi-Monitor 的儲存庫
sudo apt-get install dirmngr
sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 2C0D3C0F

# 新增  RPi-Monitor 到儲存庫清單
sudo wget http://goo.gl/vewCLL -O /etc/apt/sources.list.d/rpimonitor.list

# 如果你的環境不支援IPV6, 請先disable IPV6
sudo nano /etc/sysctl.conf
    add new line : net.ipv6.conf.all.disable_ipv6 = 1
    save, exit
sudo sysctl -p

# 進行安裝
sudo apt-get update
sudo apt-get install rpimonitor

# 更新package, 增加自動更新
sudo /etc/init.d/rpimonitor update
sudo /etc/init.d/rpimonitor install_auto_package_status_update

# 重新啟動RPi-Monitor
sudo service rpimonitor restart

# check web interface, default port is 8888
http://192.168.0.2:8888/

2020年4月5日 星期日

透過QMK configuator來編輯機械鍵盤GH60 layout

做個小記錄

之前有陣子很無聊, 看著大陸的閒魚網站
去買了一把GH60的機械鍵盤
這邊記錄一下怎麼自己刷鍵盤layout
GH60, 好玩就在他的彈性很高, 可以按照自己喜歡的方式來編輯鍵盤的layout




1. 為何要買GH60呢?
   因為喜歡機械鍵盤的手感
   因為可以客制化layout, 其實就是標準的喜歡折騰
   因為鍵盤小, 所以手的移動範圍就可以變小
   但是也因為有些鍵都不見了, 所以需要透過組合鍵, 或是切換layer來達到其他按鍵功能
   GH60比一般少了最上面的那排F1~F12, 一些功能鍵(上下左右, PtrSr, Pause, Ins, Del, Home, End...)
   所以整把看起來就小了不少
   因為鍵盤小, 所以手的移動範圍就可以變小
   但是也因為有些鍵都不見了, 所以需要透過組合鍵, 或是切換layer來達到其他按鍵功能
   e.g.
   上下左右 => Fn + WSAD, Fn + W = 上

2. 介紹如何自己客制化鍵盤Layout
   可以在QMK Configurator https://config.qmk.fm/ 的網頁介面達到所有的功能
   a. 先選好自己鍵盤的Layout, 然後可以選鍵帽的配色

   b. 設定基本按鍵功能(Layer 0)
      GH60/QMK FW支援可以將你的鍵盤設定為多個層, 每個層的每個按鍵都可以自訂
      自訂按鍵的做法, 跟著我下面做一次, 就知道了
      我習慣將Layer 0當成基本配置, 下面是我要調整的設定
  b.1 左上角的ESC/~, 換成~'
           先點鍵盤圖上要修改的按鍵, 然後去下方選擇你要的key code
           鍵盤圖上, 就會切換那個鍵成為你選擇的新key code

  b.2 space旁右側, 改為 MO(1), TG(1), Right Alt, Right Ctl
         跟b.1一樣的做法
        MO : 在Quantum, MO(1)是指, 按住這個鍵的時候, 會切換到Layer1, MO(2)->Layer2
       TG : 在Quantum, TG(1)是指, 按一下這個鍵(不用按住), 會切換到Layer1, TG(2)->Layer2
         也就是TG(1)是Layer 1的開關, 按一下開, 再按一下關
       MO(1)按住的當下會切換成Layer 1, 放開就恢復成原本的Layer 0

   c. 設計Layer 1
      按一下鍵盤旁邊Layer的數字1, 就可以切換到Layer1
      然後就可以開始設計你的Layer 1
      分享一下我Layer 1的layout, 其中有個向下的三角形, 這是KC_TRNS
      KC_TRNS個的意思是他會去找比當前這層更底下一層的設定
     比如說我Layer 1的空白鍵, 就是KC_TRNS, 然後他就會去找Layer 0的設定, 就是Space空白鍵, 所以在Layer1的時候, Space鍵的keycode就會對應到Layer0的Space

      還可以參考更多key code, https://docs.qmk.fm/#/keycodes
      這邊就是我覺得GH60最可玩的地方
      可以重複去調整layout, 直到最順手

   d. 下載備份/上傳載入Layout
      在你好不容易設計好了一版layout, 可以先在這邊點下載, 把當前的layout備份到電腦上
      layout設定檔是一個json檔案, 小小的
      在下次你想要重新微調layout的時候, 可以在這邊上傳上次的json檔, 繼續編輯


3. 如何將設計的Layout換到實體鍵盤上
      a. 編譯鍵盤韌體, 下載
         剛剛我們設計的layout, 還需要將他編譯為韌體來做燒錄的動作
         QMK有提供線上編譯, 我們無需自己抓code安裝toolchain, 可以省掉不少麻煩
         按下COMPILE, 等一會, 好了就可以下載FIRMWARE
       

      b. 安裝QMK ToolBox
         目前最新版是0.0.17 Link

      c. 燒錄FIRMWARE
         開啟QMK Toolbox, 選擇剛剛下載的hex檔案, 按下Flash
         燒錄完成, 重新插拔一次鍵盤的USB, 打完收工

2020年4月4日 星期六

家庭網路設定應用 RouterOS + NAS + Raspberry Pi

家庭網路設定應用 RouterOS + NAS

這邊敘述一下我家裡的網路設備

更新 : 新增Raspberry Pi來跑一些應用

Router : Mikrotik hap ac2

              Mobile01開箱文參考
              效能測試
       
    某次因緣際會下, 接觸到Mikrotik這個品牌, 同事相當大力的讚揚這個品牌
    加上那時候家裡的小米router掛了, 就買了這台那時候Mikrotik最新的家用型號hap ac2
    Mikrotik是做軟路由的OS-RouterOS, hap ac2就像是一台小電腦, 跑RouterOS
    可以做到很多的功能, 但也因此就比較不好入門
    但其實, 現在Mikrotik有Quick Set的快速設定頁面, 買回來後到會動其實不會有太大問題
 
    CPU : 4 core, ARM32bits, IPQ-4018, 716 MHz
    RAM : 128 MB(運氣好, 買到第一批是上256MB)
    Ethernet : 10/100/1000
    Wireless : AC1200
    Wireless 2.4 GHz : 300 Mbit/s, 2 chain, 802.11b/g/n, Wi-Fi 4
    Wireless 5 GHz : 867 Mbit/s, 2 chain, 802.11a/n/ac, Wi-Fi 5

NAS : Synology DS216+

    Mobile01開箱Cool3c開箱T客邦開箱
    這台已經買了很久, 2016年的機子, 到現在也已經快四年了
    買來之後, 自己升級了Ram, 換上一根8G RAM
    硬碟裝了1T+4T, 沒有跑raid
    1T拿來跑BT, 4T拿來儲存影片
    不過, 時至今日, 覺得似乎BT, 或是存MP3, 電影, 日/美/台劇, 動畫, 迷片好像開始沒啥意義了
    現在都進入streaming的時代, 很多平台都可以提供這些內容
    加上現在也懶惰了, 不會像以前那樣花時間去找BT來源下載
    所以, 現在NAS基本上我已經不太會常態性開機

Raspberry Pi 2B

    這片版子其實買很久了, 一開始來拿當作播放器, 跑XBMC來播放NAS上的影片
    但是後來購入ChromeCast後就沒在用了
    這陣子在NAS上跑的service都是常駐型的, 就打算把這兩個service跑在pi上


功耗紀錄: 用小米插座來統計, 跑個3天看均值
    Hap AC2 : 4.65W / 0.12度(天)
    比較NAS跟Pi跑AdgardHome + bitwarden的功耗
    NAS : 21W / 0.52度(天)
    Pi : 1.6W~2.4W / 0.05度(之後再更新)

網路環境

    社區網路 <Port mapping> RouterOS <> NAS
    有請社區網路, 幫忙做Port mapping
    udp 1701, 500, 4500 : 做VPN, l2tp over IPSec
    tcp 8888, 隨便開一個port來讓我需要其他service的時候, 可以自己mapping

這陣子, 因為COVID19, 比較多時間在家裡
所以, 我就開始找些事來做做, 也就想到了這些東西應該可以有更多的功能
這邊就把做過的部分, 加上這幾天新增加的部分做個紀錄
紀錄順序採用先完成的先記錄
但是因為, 有些之前就做好, 但是沒有整理成文章
這種的項目就先列好, 日後補上

1. 家用頻寬管理(RouterOS)

    待補
    主要是之前有透過NAS在跑BT時候, 為了不讓整個網路便很慢
    所以有做一些QOS的頻寬管理設定

2. VPN(RouterOS)

    工作關係, 出差的時候住旅館, 用旅館的wifi總覺得不是很安全
    所以第一個想法, 架個VPN來讓自己需要的時候可以使用
    手機 <旅館wifi> 旅館Router <> 家中VPN Server <>Internet
    VPN連線上, 等於你可以像在家中使用區網
    這樣有個好處, 如果你的NAS放了不少比較私密的東西
    那你可以將NAS設為只能區網內存取, 然後人在外面的時候透過VPN連回家中存取

    可以參考
    RouterOS-架設VPN-l2tp/Ipsec, 用iOS連接
 
    如何阻擋來try VPN連線的IP with RouterOS (VPN IP banner)
 
    RouterOS-架設VPN-IKEV2, 用iOS連接
 

    NAS不想對外, 也可以透過VPN連線後, 就像在家中使用一樣
    架設兩個, 主要是用IKEV2, 據說連線上比較快, 而且比較安全(使用憑證檔)


3. Adblock, 擋廣告 (RouterOS + NAS + Pi)

    我會連到一些大陸網站看小說, 這些網站都會超多廣告的
    如果只是版面上的配置, 那我覺得還好, 反正別人架網站也需要收入的
    但是有些廣告太惱人了, 還會讓你一定要點到, 或是讓你一次關不掉
    這時候, 這個就可以派上用場了

    請參考下面, PiHole, Adguardhome都可, 我最後是保留Adguardhome
    在Synology NAS docker上架設pi-hole來擋廣告(adblock) with RouterOS設定
 
    在Synology NAS docker上架設adguardhome (像是pihole)來擋廣告(adblock)
 
    RouterOS設定DNS Server
 
    RouterOS內動態確認DNS Server是否正常, 並切換設定

    在Rasberry Pi 2B上跑Docker, AdguardHome, Bitwarden, RPi-Monitor
 

4. 密碼管理軟體, bitwarden (NAS + Pi)

   這個其實是因為, 我太依賴Chrome了
   Chrome會幫你把網頁上的密碼都記起來, 下次瀏覽的時候就可以自動填入
   換了iPhone後, iOS的鑰匙圈(keychain)也有一樣的功能
   但總是覺得, 這樣真的安全嗎? 密碼都記錄在別人家
   所以, 就去搜尋這類的軟體, 有沒有open source的軟體, 能夠self hosted, 然後手機app, 瀏覽器都要能支援
   最後找到了bitwarden, 可以把Server架在NAS上, 這樣你的密碼database就都在自己手裡了
   安裝請參考
   在Synology NAS docker上搭建bitwarden 密碼管理軟體
 
   在Rasberry Pi 2B上跑Docker, AdguardHome, Bitwarden, RPi-Monitor

2020年4月3日 星期五

RouterOS內動態確認DNS Server是否正常, 並切換設定


目的 : 如何動態確認DNS Server是否正常工作,
       如果DNS Server不正常工作的時候, 可以動態切換到另外一台DNS Server

場景 : 在架設Adguardhome(or Pi Hole)後, 如何預防Adguarhome server掛點
       社區網路 <> RouterOS <> 手機, 電腦, NAS, Adguardhome
       家中網路, 都使用Router當作DNS Server, 然後Router是使用Adguardhmoe來當作DNS Server
       所以一般裝置的DNS query是
          手機/電腦 > DNS query > Router > Adguardhome > Router > 手機/電腦
 
如何架設Adguardhome, PiHole, RouterOS可以參考
在Synology NAS docker上架設pi-hole來擋廣告(adblock) with RouterOS設定
        在Synology NAS docker上架設adguardhome (像是pihole)來擋廣告(adblock)
        RouterOS設定DNS Server

想法 : 目前我的Adguardhmoe是透過NAS上的docker來架設, 之後打算用Pi來架設
       如果Pi跑起來不穩, Adguardhome掛了, 那不就整個區網內的裝置都無法工作了
       所以想要能夠在Adguardhome掛掉的時候, 將Router設定的DNS 從Adguardhome改為用hinet的DNS

後來查了一下, 其實還算好寫
Ref : Mikrotik_Scripting
透過Scheduler來定期跑一段script
script中透過resolver去測試Adguardhome能否正常的將網址轉成ip
能正常轉換 : RouterOS DNS就設為Adguardhome
無法轉換 : RouterOS DNS就設為hinet DNS

Winbox > System > Scheduler, 新增一組
    name = dns-check
    Interval = 00:01:00, 我是設定1分鐘跑一次, 可以自行調整
    On Event = 把下面的Script貼進去
    DNSPrivate請改為自己架設Adguardhome的ip
    DNSPublic請改為自己網路供應商建議的DNS
    TestDomai, 目前是用google去當作測試
#### Script - dns-check START
:local DNSPrivate "192.168.0.88"; #### Adguardhome or PiHole
:local DNSPublic "168.95.1.1,8.8.8.8"; #### hinet
:local TestDomain "www.google.com"
:local DNSCurrent [/ip dns get servers];
:local bIsDNSPrivateOK true
:do {
:put [:resolve $TestDomain server $DNSPrivate];
:set bIsDNSPrivateOK true
#/log info message="resolver with Private DNS $DNSPrivate ok";
} on-error={
:put "resolver failed";
:set bIsDNSPrivateOK false
/log info message="resolver with Private DNS $DNSPrivate failed";
}
:if (true = $bIsDNSPrivateOK) do={
:if ($DNSCurrent != $DNSPrivate) do={
/ip dns set servers=$DNSPrivate;
/log info message="set DNS as DNSPrivate $DNSPrivate";
}
} else={
:if ($DNSCurrent = $DNSPrivate) do={
/ip dns set servers=$DNSPublic;
/log info message="set DNS as DNSPublic $DNSPublic";
}
}
#### Script - dns-check END

如何測試, 可以將scheduler的interval改短一點(10s)
然後去拔掉你的Adguardhome server的網路線
再去Winbox > log去看看有沒有印出"set DNS as DNSPublic $DNSPublic"
網路線插回去, 再看看log有沒有"set DNS as DNSPrivate $DNSPrivate"

RouterOS設定DNS Server

如果有自行架設DNS Server的話, RouterOS下如何設定

前幾篇有提到如何架設AdguardHome and Pi Hole可以參考

    在Synology NAS docker上架設pi-hole來擋廣告(adblock) with RouterOS設定
    在Synology NAS docker上架設adguardhome (像是pihole)來擋廣告(adblock)

這兩個都是可以自行架設在NAS上, 或是Pi上面, 來達到擋廣告的效果
原理就是, 跑DNS Server起來, 然後內部會利用黑名單來阻擋廣告網頁
所以, 區網內的DNS Server就要指到它才會有效果

如果有自行架設DNS Server的話, RouterOS下如何設定

環境
1. 社區網路 <> RouterOS(192.168.0.1) <> 家中設備(NAS, 手機, NB...)
2. 在NAS上, 有架設AdguardHome來當作DNS Server去實現adblock效果
3. RouterOS當作DHCP server去分配IP
4. NAS(192.168.0.88)上架設AdguardHome來當作DNS Server

想法
1. 將家中設備的DNS Server都設為Router(192.168.0.1)
2. Router DSTNAT 強制將LAN進來的 tcp/udp port 53都轉到Router(192.168.0.1)
3. Router的DNS server在指定為NAS-AdguardHome(192.168.0.88)

好處:
1. 所有的device用的DNS request都會強制走到Router
2. 如果要更改DNS Server, 指需要改Router使用的DNS Server即可
   e.g.
   a. NAS掛了, 要改設定, 只要把Router使用的DNS Server改掉即可

RouterOS設定
1. 將DHCP Server內, 分配出去的DNS改為RouterOS IP
   WinBox > IP > DHCP Server > Networks > DNS Server = 192.168.0.1

2. DSTNAT 強制將LAN進來的 tcp/udp port 53都轉到Router(192.168.0.1)
   WinBox > IP > Firewall > NAT
    add action=dst-nat chain=dstnat comment="Force all DNS(53) to Router" \
        dst-port=53 in-interface-list=LAN protocol=tcp to-addresses=192.168.0.1
    add action=dst-nat chain=dstnat dst-port=53 in-interface-list=LAN protocol=\
        udp to-addresses=192.168.0.1

3. 設定RouterOS DNS
   WinBox > IP > DNS
   Server : 192.168.0.88
            設定Router使用的DNS Server, 這邊是使用NAS-AdguardHome(192.168.0.88)
如果那天, NAS掛了, 這邊就可以改成hinet 168.95.1.1 or google 8.8.8.8
   打勾 Allow Remote Requests, 這樣就是可以幫RouterOS當作DNS server來讓client查詢

下一步, 想要寫個script去pin AdguardHome, 不通的時候自動切換
更新 : 已經寫好了, 請參考
            RouterOS內動態確認DNS Server是否正常, 並切換設定

2020年4月1日 星期三

安裝Raspberry Pi 2B 來跑docker 前置準備

這一兩天, 用NAS docker來跑了幾個service
    在Synology NAS docker上架設pi-hole來擋廣告(adblock) with RouterOS設定
    在Synology NAS docker上架設adguardhome (像是pihole)來擋廣告(adblock)
    在Synology NAS docker上搭建bitwarden 密碼管理軟體

短暫試用起來, 還蠻喜歡的
但是, NAS現在對於我來說, 已經不是常態性開機的狀態
加上, 手邊又有閒置的Pi 2B
所以, 想說來把這兩個service改用Pi來
常駐型開機, Pi 2B應該還是會比NAS來的省電

前置作業
更新Pi 2B的作業系統

1. 下載新的image
   https://www.raspberrypi.org/downloads/raspbian/
   如果你會接hdmi到螢幕來看畫面或是操作, 就選Raspbian Buster with desktop
   我這次是打算拿來跑server, 不會接螢幕, 選Raspbian Buster Lite

2. 用燒錄程式把image燒到SD卡
   Tool : Etcher, https://etcher.io/
   沒甚麼特別, 選Image, 確認SD卡是否正確
   就燒吧

3. 如何讓樹梅派一開機就有wifi/ssh
   關鍵字可以用 (Raspbian Buster Lite Headless) 去搜尋
   Headless就是Pi上沒有接任何東西
   也就是透過網路/ssh去連接
   Ref:
        https://peppe8o.com/install-raspbian-buster-lite-in-your-raspberry-pi/
https://sigmdel.ca/michel/ha/rpi/guide_buster_01_en.html#buster
https://medium.com/@danidudas/install-raspbian-jessie-lite-and-setup-wi-fi-without-access-to-command-line-or-using-the-network-97f065af722e
 
   步驟2燒錄好的SD卡, 拔出重新插回電腦, 可以看到有個boot區
   a. 設定開機的wifi
      到boot區下, 新增一個文字檔wpa_supplicant.conf
      把下面內容貼進去, 但是<<your_SSID>>, <<your_PSK>> 請換成你家裡的wifi ssid/密碼
        ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
        update_config=1
        country=TW
        network={
             ssid="<<your_SSID>>"
             psk="<<your_PSK>>"
             key_mgmt=WPA-PSK
        }

    b. 設定開機就開啟ssh
       到boot區下, 新增一個文字檔ssh
       請注意, 不能有附檔名
       錯的 : ssh.txt, ssh.log 這樣都是錯的

到這邊, 應該就大功告成了

因為Pi 2B現在還在其他地方
所以先把能預先做的準備一下

後面需要在Pi 2B上裝docker來跑bitwardenrs

更新 : 已經完成了, 可以參考
在Rasberry Pi 2B上跑Docker, AdguardHome, Bitwarden, RPi-Monitor

就先找了一下安裝docker的文章
https://withblue.ink/2019/07/13/yes-you-can-run-docker-on-raspbian.html
https://pimylifeup.com/raspberry-pi-docker/
https://blog.alexellis.io/how-to-fix-docker-for-raspbian-buster/
https://www.reddit.com/r/docker/comments/ck6x0z/install_docker_onto_an_rpi_4_with_raspbian_buster/
https://openhome.cc/Gossip/CodeData/DockerLayman/DockerLayman2.html

https://www.raspberrypi.org/forums/viewtopic.php?t=243691
https://github.com/docker/for-linux/issues/545

RouterOS-架設VPN-IKEV2, 用iOS連接


之前有搭建L2TP, 比較簡單, 也可以參考一下
     RouterOS-架設VPN-l2tp/Ipsec, 用iOS連接

趁最後一天有時間, 也來搭建一下IKEV2 VPN

Ref :
https://wiki.mikrotik.com/wiki/Manual:IP/IPsec#Road_Warrior_setup_using_IKEv2_with_RSA_authentication
https://www.mobile01.com/topicdetail.php?f=110&t=5394893

public ip : 2.2.2.2
ddns : test.routeros.net

憑證有3組,分別是: ca / server / client

新增憑證ca:
    Sign CA的時候, ca-crl-host=test.routeros.net
    這裡要填上你的public IP : 2.2.2.2
    或是你的DNS : test.routeros.net

    Winbox > system > certificate

    /certificate
    add common-name=ikev2_ca name=ikev2_ca days-valid=3650 trusted=yes
    sign ikev2_ca ca-crl-host=2.2.2.2

新增憑證server:
    新增cert. 的時候, common-name, subject-alt-name這兩欄要填你的public IP 或是DNS
        IP : common-name=2.2.2.2 subject-alt-name=IP:2.2.2.2
        DNS : common-name=test.routeros.net subject-alt-name=DNS:test.routeros.net
    key-usage只打勾tls-server
然後Sign的時候, 選ikev_ca來Sing server cert.

    Winbox > system > certificate

    /certificate
    add common-name=2.2.2.2 subject-alt-name=IP:2.2.2.2 key-usage=tls-server name=ikev2_server days-valid=3650 trusted=yes
    sign ikev2_server ca=ikev2_ca

新增憑證client:
    key-usage只打勾tls-client
然後Sign的時候, 選ikev_ca來Sing server cert.

    Winbox > system > certificate

    /certificate
    add common-name=ikev2_client key-usage=tls-client name=ikev2_client days-valid=3650 trusted=yes
    sign ikev2_client ca=ikev2_ca

新增ipsec profile/proposal
    profile是Phase 1的加解密, proposal是Phase 2
iOS支援的選項可以參考 : https://wiki.mikrotik.com/wiki/Manual:IP/IPsec#iOS_client_configuration

Winbox > ip > ipsec
    /ip ipsec profile
    add name=ikev2

    /ip ipsec proposal
    add name=ikev2 pfs-group=none

新增Mode config
    這是來分配ip給client端的
    /ip pool
    add name=ike2-pool ranges=192.168.77.2-192.168.77.254

    /ip ipsec mode-config
    add address-pool=ike2-pool address-prefix-length=32 name=ikev2-conf

新增policy group, policy給peer用
    /ip ipsec policy group
    add name=ikev2-policies

    /ip ipsec policy
    add dst-address=192.168.77.0/24 group=ikev2-policies proposal=ikev2 \
        src-address=0.0.0.0/0 template=yes
新增 peer
    /ip ipsec peer
    add exchange-mode=ike2 name=ikev2 passive=yes profile=ikev2

新增identity
    這邊無法跟官網一樣, 需要多指定remote-certificate
    /ip ipsec identity
    add auth-method=digital-signature certificate=ikev2_server generate-policy=\
        port-strict mode-config=ikev2-conf peer=ikev2 policy-template-group=\
        ikev2-policies remote-certificate=ikev2_client

    這裡有點怪, 我第一次設定, 這邊都會連線失敗
強制改為用match-by=certificate, 去用remote-certificate=ikev2_client就可以連上
但是我整個重新作一次, 又不需要這樣了.....
    /ip ipsec identity
    add auth-method=digital-signature certificate=ikev2_server generate-policy=\
        port-strict match-by=certificate mode-config=ikev2-conf peer=ikev2 policy-template-group=\
        ikev2-policies remote-certificate=ikev2_client

MSS轉換
 因為我對MSS不瞭, 所以都是上網爬文, 囫圇吞棗, 選做法1.
做法1. Ref: https://www.mobile01.com/topicdetail.php?f=110&t=5394893
    到Winbox > ip > firewall > mangle, 新增兩條rule, 並且拉到最上面
    /ip firewall mangle
    add action=change-mss chain=forward comment="ikev2-change MSS" new-mss=\
            clamp-to-pmtu passthrough=yes protocol=tcp tcp-flags=syn
    add action=change-mss chain=output comment="ikev2-change MSS" new-mss=\
            clamp-to-pmtu passthrough=yes protocol=tcp tcp-flags=syn

    做法2.
    Ref: https://forum.mikrotik.com/viewtopic.php?t=152831
Ref: https://forum.mikrotik.com/viewtopic.php?f=2&t=153825
        /ip firewall mangle
        add action=change-mss chain=forward comment="ikev2-change MSS" disabled=yes \
            ipsec-policy=in,ipsec new-mss=1382 passthrough=yes protocol=tcp \
            tcp-flags=syn

到這邊, RouterOS端算是都設定完成了
接下來換手機端(iOS)

先匯出ikev2_ca, ikev2_client
    匯出client憑證的時候, 可以選擇要不要加密, 我是follow官網做加密, 密碼範例:1234567890
    /certificate
    export-certificate ikev2_ca type=pem
export-certificate ikev2_client export-passphrase=1234567890 type=pkcs12

Winbox > Files
可以看到剛剛匯出的兩個檔案, 選擇兩個檔案後, 按Download, 可以存到電腦上
    將憑證用email寄給手機收的到的email

iOS匯入憑證
   1. 手機收信, 儲存附件ikev2_ca.crt, ikev2_client.p12到iphone上
   2. iphone > 檔案 > 找剛剛的ikev2_ca.crt, 按一下
   3. iphone > 設定 > 描述檔 > ikev2_ca > 安裝 > 安裝
   4. iphone > 設定 > 一般 > 關於本機 > 憑證信任設定 > ikev2_ca > 啟用
   5. iphone > 檔案 > 找剛剛的ikev2_client.p12, 按一下
   6. iphone > 設定 > 描述檔 > ikev2_client.p12> 安裝 > 輸入匯出時設定的密碼 > 安裝


iOS設定VPN連線
   設定 > 一般 > VPN > 加入VPN設定
   類型 : ikev2
   描述 : 自行取個名字, e.g. HomeVPN
   伺服器 : 輸入IP or 網址 (在建立憑證的時候, 看你是打DNS網址, 還是IP)
   遠端識別碼 : 輸入IP or 網址 (在建立憑證的時候, 看你是打DNS網址, 還是IP)
   本機識別碼 :
   使用者認證 : 無
   使用憑證 : 是, 啟用
   憑證 : ikev2_client

打完收工

在Raspberry Pi 2B上跑Docker, AdguardHome, Bitwarden, RPi-Monitor

在Raspberry Pi 2B上跑Docker, AdguardHome, Bitwarden, RPi-Monitor 請先參考前置準備工作 安裝Raspberry Pi 2B 來跑docker 前置準備 安全性考量, 移除預設pi帳號 Ref :     h...