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

打完收工

2020年3月29日 星期日

在Synology NAS docker上架設adguardhome (像是pihole)來擋廣告(adblock)

已經有架設pi-hole
     在Synology NAS docker上架設pi-hole來擋廣告(adblock) with RouterOS設定

再參考架設pi-hole的時候, 又看到adguardhome
Ref :
https://www.jkg.tw/p2158/
https://www.jkg.tw/p2298/

就想說來換看看吧
安裝記錄如下
Ref : https://hub.docker.com/r/adguard/adguardhome#quickstart
圖文可以參考上面連結

假設NAS IP : 192.168.0.88

下面僅用文字記錄自己的安裝過程
1. DMS 套件中心 > 安裝docker套件
2. 開啟docker
3. docker > 倉庫伺服器  > 搜尋"adguardhome" > 下載 "adguard/adguardhome" 這個image
4. docker > 映像檔 > 選擇剛剛下載的pihole > 佈署 > 進階設定
    a. 進階設定 > 勾選 自動重啟
    b. 儲存空間 > 新增資料夾
        docker/adguardhome/work > 掛載路徑 /opt/adguardhome/work
        docker/adguardhome/conf > 掛載路徑 /opt/adguardhome/conf
    c. 網路 > 勾選 與docker host使用相同網路
    d. 設定完成, 點選套用, 並打勾設定完成後啟動
    f. docker > 容器, 看看剛剛設定的有沒有跑起來了
5. 在瀏覽器網址列輸入 http://192.168.0.88:3000就可以開始adguardhome的管理頁面
6. 一進去後, 先把管理介面的port由3000改為自己喜歡的部分

設定部分, 可以參考
https://www.jkg.tw/p2158/
https://www.jkg.tw/p2298/

大部分都採取預設即可, 下面列出一些我有修改的
a. 設定port,
   管理介面的port, 預設是3000, 自行決定要不要改
   DNS伺服器的port, 預設是53, 建議不要去動
b. 設定管理者帳號密碼
c. 設定 > DNS 設定 > 上游的 DNS 伺服器
   其實這邊我沒sense, 所以就參考別人的設定, 尾巴再補上hinet+google
   https://dns10.quad9.net/dns-query
   https://1.1.1.1/dns-query
   https://1.0.0.1/dns-query
   tls://101.101.101.101
   168.95.1.1
   8.8.8.8
   打勾 > 透過可同時查詢所有上游伺服器

f. 過濾器 > 封鎖清單
   把預設沒開的, 都打勾
   新增部分, 參考 https://www.jkg.tw/p2298/

   NeoHost-Basic:如果有在用中國網站的話(淘寶、騰訊、百度。。等等),推薦可以訂閱
   Web : https://github.com/neoFelhz/neohosts
   新增名稱 : NeoHost-Basic
   網址清單 : https://cdn.jsdelivr.net/gh/neoFelhz/neohosts@gh-pages/basic/hosts.txt

   CoinBlocker:可以擋掉一些拿你機器來挖礦的主機域名
   Web : https://gitlab.com/ZeroDot1/CoinBlockerLists
   新增名稱 : CoinBlocker
   網址清單 : https://zerodot1.gitlab.io/CoinBlockerLists/hosts

   StevenBlack:知名的擋廣告清單,PiHole 有內建
   Web : https://github.com/StevenBlack/hosts
   新增名稱 : StevenBlack
   網址清單 : https://raw.githubusercontent.com/StevenBlack/hosts/master/alternates/fakenews-gambling-porn-social/hosts

   CHEF-KOCH ADs:這個作者很厲害,之前在 GitHub 上面抓出超多矽谷公司的域名,並提供清單阻擋
   Web : https://gitlab.com/CHEF-KOCH/cks-filterlist
   新增名稱 : CHEF-KOCH ADs
   網址清單 : https://gitlab.com/CHEF-KOCH/cks-filterlist/raw/master/hosts/Ads-tracker.txt
 
   anti-AD v4 : anti-AD是目前中文区命中率最高的广告过滤列表
   Web : https://github.com/privacy-protection-tools/anti-AD
   新增名稱 : anti-AD v4
   網址清單 : https://raw.githubusercontent.com/privacy-protection-tools/anti-AD/master/anti-ad-easylist.txt

然後記得更新Router的DNS設定

更新 : 如果你是使用RouterOS的Router, 可以參考
    RouterOS設定DNS Server
    RouterOS內動態確認DNS Server是否正常, 並切換設定


可以參考上一篇的後半段
    在Synology NAS docker上架設pi-hole來擋廣告(adblock) with RouterOS設定

如果人在外面手機4G上網, 可以配合VPN連回來用

在Synology NAS docker上搭建bitwarden 密碼管理軟體


尋找Open source, self host的密碼管理軟體
而且要能跨平台
最後找到bitwarden https://bitwarden.com/
看官網幾乎所有平台都有支援
iOS上還可以整合到自動填寫密碼, 取代iCloud keychain
所以就想說自己裝起來, 試用看看


網路環境
NAS本機IP : 192.168.0.88

目標, 利用docker跑bitwarden server, port 8888

Ref :
https://www.jkg.tw/p1984/

請參考上面連結, 下面是文字記述
1. DMS 套件中心 > 安裝docker套件
2. 開啟docker
3. docker > 倉庫伺服器  > 搜尋"bitwarden" > 下載 "bitwardenrs/server" 這個image
4. docker > 映像檔 > 選擇剛剛下載的bitwardenrs/server > 佈署 > 進階設定
    a. 進階設定 > 勾選 自動重啟
    b. 儲存空間 > 新增資料夾
        /docker/bitwarden > 掛載路徑 /data
    c. 網路 > "不要選" "不要選" "不要選" 與docker host使用相同網路
d. 連接Port設定
    本機 3012 <> 容器 3012
本機 8888 <> 容器 80
    e. 設定完成, 點選套用, 並打勾設定完成後啟動
    f. docker > 容器, 看看剛剛設定的有沒有跑起來了
 5. 在瀏覽器網址列輸入 http://192.168.0.88:8888
    這時候我用chrome可以開啟頁面
開始註冊帳號的時候, 都填完了, 卻無法按下送出
<<-----------------------------

後來發現, 只要改用其他瀏覽器(不要用chrome)就可以正常登入了
所以請在區網內, 用手機的Safari, 直接打 http://192.168.0.88:8888就可以正常了
後面的動作, 關於SSL key可以全都不要做

因為, 就算後面這樣亂搞後, 電腦(Win7)上的 bitwarden client端軟體也會無法登入

與其花這麼多功, 而且很有可能是錯的
反正我原本就想說只用在內網環境, 手機VPN回來同步

所以就做到這邊即可

目前狀況, 都在內網
iOS, 可以login bitwarden web server
iOS, bitwarden app可以login
Windows, chrome bitwarden plugin, 可以login
Windows, bitwarden app, 可以login
Windows, chrome無法無法無法login bitwarden web

除了用瀏覽器直接敲ip連線web的作法外
其他(iOS app, Windows app, chrome plugin)   都要記得設定自我託管環境URL
   >>開啟App, 主畫面, 左上角有個齒輪
   >>選進去後, 設定自我託管環境URL
   >>http://192.168.0.88:8888

<<------------------------------
Google後, 才發現原來應該是
chrome在http下有些API不能用
   Chrome will not allow the use of crypto APIs without https
   https://github.com/bitwarden/server/issues/592

加上bitwarde, 一定要有https下, 才能正常工作
所以, 這時候還要設定SSL憑證, 不然無法用Chrome登入
Ref :
https://github.com/dani-garcia/bitwarden_rs/wiki/Enabling-HTTPS
https://github.com/dani-garcia/bitwarden_rs/wiki/Private-CA-and-self-signed-certs-that-work-with-Chrome
https://blog.miniasp.com/post/2019/02/25/Creating-Self-signed-Certificate-using-OpenSSL

由於我沒有domain, 加上也只打算在local端跑server
手機在外真的要sync的話, 就VPN回來再做sync
所以選擇用self-signed-certs

--- 下面開始都是亂搞, 小弟我對憑證這塊完全不懂, 所以就是囫圇吞棗 ---
--- 請自行尋找比較正規的做法 ---
--- 如果可以提供比較正確的做法給我參考, 那就更感謝了 ---
1. Create CA key
   openssl genpkey -algorithm RSA -aes128 -out private-ca.key -outform PEM -pkeyopt rsa_keygen_bits:2048

   Enter PEM pass phrase:
   這時候要輸入密碼, 請自己設定, 但是要記好, 後面會用到

   Enter PEM pass phrase:
   再輸入一次密碼

2. Create CA certificate:
   openssl req -x509 -new -nodes -sha256 -days 3650 -key private-ca.key -out self-signed-ca-cert.crt
 
   Enter pass phrase for private-ca.key:
   輸入上面的密碼
 
   後面會有一堆問題, 我看網路上大家是說都沒關係
   但是有一欄, 我有填一個local domain name, 192.168.0.88
   Common Name (e.g. server FQDN or YOUR name) []:192.168.0.88
 
   Country Name (2 letter code) [AU]:
   State or Province Name (full name) [Some-State]:
   Locality Name (eg, city) []:
   Organization Name (eg, company) [Internet Widgits Pty Ltd]:
   Organizational Unit Name (eg, section) []:
   Common Name (e.g. server FQDN or YOUR name) []:192.168.0.88
   Email Address []:

3. Create a bitwarden key:
   openssl genpkey -algorithm RSA -out bitwarden.key -outform PEM -pkeyopt rsa_keygen_bits:2048

4. Create the bitwarden certificate request file
   openssl req -new -key bitwarden.key -out bitwarden.csr
 
5. Create a text file bitwarden.ext
   建立一個文字檔-bitwarden.ext, 內容直接下面貼進去即可(DNS記得換一下)
   authorityKeyIdentifier=keyid,issuer
   basicConstraints=CA:FALSE
   keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
   extendedKeyUsage = serverAuth
   subjectAltName = @alt_names

   [alt_names]
   DNS.1 = 192.168.0.88
   DNS.2 = bitwarden.local

6. Create the bitwarden certificate, signed from the root CA:
   openssl x509 -req -in bitwarden.csr -CA self-signed-ca-cert.crt -CAkey private-ca.key -CAcreateserial -out bitwarden.crt -days 365 -sha256 -extfile bitwarden.ext

7. 把產生出來bitwarden.crt, bitwarden.key丟到NAS上的
   docker/bitwarden/ssl

8. 到NAS > docker > 容器 > bitwardenrs_srv > 編輯
   儲存空間, 新增docker/bitwarden/ssl 掛載路徑 /ssl
   環境設定, 新增ROCKET_TLS, 數值{certs="/ssl/bitwarden.crt",key="/ssl/bitwarden.key"}
 
9. 儲存, 啟動這個容器

10. chrome上輸入 https://192.168.0.88:8888
   會顯示不受信任, 往下捲會有一個"繼續前往"
   點下去就好了

11. 先在Chrome上註冊一個帳號吧

手機iOS端,

1. 去App Store搜尋bitwarde, 安裝
2. 開啟App, 主畫面, 左上角有個齒輪
   選進去後, 設定自我託管環境URL
   https://192.168.0.88:8888
3. 這時後登入會顯示錯誤, 需要安裝剛剛的CA certificate
4. 回到電腦端, 把剛剛產生的self-signed-ca-cert.crt用email寄給自己
5. 手機收信, 儲存附件self-signed-ca-cert.crt到iphone上
6. iphone > 檔案 > 找剛剛的self-signed-ca-cert.crt, 按一下
   會出現"已下載描述擋"
7. iphone > 設定 > 描述檔 > 192.168.0.88 > 安裝 > 安裝
8. iphone > 設定 > 一般 > 關於本機 > 憑證信任設定 > 192.168.0.88 > 啟用
9. iphone > App bitwarde, 應該就可以登入了
10.iphone > 設定 > 密碼與帳號 > 自動填寫密碼 > Bitwarden

剩下就開始試用看看好不好用了

2020年3月28日 星期六

如何阻擋來try VPN連線的IP with RouterOS (VPN IP banner)


看到Mobile01上的討論
需求 :
  拜請gfx神人,最近發現好像有人會來踹L2TP VPN,所以想問以下兩個問題。
  1.VPN登入的錯誤記錄,有辦法變成獨立的log檔查閱嗎?目前ROS的log檔內容實在太多啦。
  2.來踹的IP可以自動加到address list中嗎?例如列到BanIP的列表中。

神人回覆 : https://www.mobile01.com/topicdetail.php?f=110&t=3205444&p=682&p=682#72357712

結論 >> 先說結論 >> 如果連線, 15分鐘內沒有成功, 就會被block 14天

設定請參考原始作者的文章

這邊是自己消化後, 來理解為何要這樣設定
也不知道對不對, 反正先筆記下來

address list:
friends : 可信賴的list, 可直接接受
mobile : dynamic list, 通過認證的ip list
temp : dynamic list, 暫存區, 還未確認是否為正常的連線ip list
Scanners : dynamic list, 掃port的ip list, 直接drop掉

先參考RouterOS內部的packet flow
https://wiki.mikrotik.com/wiki/Manual:Packet_Flow
https://help.mikrotik.com/docs/display/ROS/Packet+Flow+in+RouterOS




如果是外部連到Router上的l2tp/ipsec VPN server
1. 流到(I), 然後進到[PREROUTING]
2. [PREROUTING]內, 先碰到<RAW PREROUTING>
   a. 接受src-address-list=friends
   b. drop掉src-address-list=Scanners

   /ip firewall raw
   add action=accept chain=prerouting comment=friends src-address-list=friends
   add action=drop chain=prerouting comment=Scanners src-address-list=Scanners
 
3. 進到[INPUT], 碰到<MANGLE INPUT>
   a. 接受所有LAN端來的連線
   b. 接受所有src-address-list=friends的連線
   c. 接受所有src-address-list=mobile的連線
   d. 如果新連線是udp port=1701,500,4500的時候, 而且ip不在temp list中, 先跳到(vpn-point)節點
   e. 在(vpn-point)節點上的連線, 如果src ip不在Scanners list內的話, 就把src ip加到temp list中, 設定16分鐘後timeout

   /ip firewall mangle
   add action=accept chain=input comment="Local area network" src-address=192.168.0.0/16
   add action=accept chain=input comment=friends src-address-list=friends
   add action=accept chain=input comment=mobile src-address-list=mobile
   add action=jump chain=input connection-state=new dst-port=1701,500,4500 \
      jump-target=vpn-point protocol=udp src-address-list=!temp
   add action=add-src-to-address-list address-list=temp address-list-timeout=16m chain=vpn-point \
      src-address-list=!Scanners

4. 從[INPUT]<MANGLE INPUT>, 再進到<FILTER INPUT>
   a. 接受所有src-address-list=friends的連線
   b. 接受所有src-address-list=mobile的連線
   c. drop掉從pppoe-out1進來, 非lan端的src address, 且src ip不在temp list內, conntection state為invalid,或是new
   /ip firewall filter
   add action=accept chain=input comment=friends src-address-list=friends
   add action=accept chain=input comment=mobile src-address-list=mobile
   add action=drop chain=input comment=Outlanders connection-state=invalid,new \
      in-interface=pppoe-out1 src-address-list=!temp src-address-type=!local

到這邊可以看到, 主要就是
    friend 是static list, 預設就都會被accept
temp 是dynamic list, 從udp 1701,500,4500來的新連線, 只要不在Scanner list內, 就都會被先加到temp list
temp 有timeout值
mobile 是dynamic list, 也是都會被accept
    Scanner list就是會直接被drop掉
但是, 現在只有看到src ip被加到temp的動作
完全沒看到src ip甚麼時候被加到mobile or Scanners

Mobile01上, 還有幾個步驟
------------------
/ppp profile
On Up:
:if ([/interface get $interface type]~"in") do={
  :do {/ip firewall address-list add list=mobile address=$"caller-id" timeout=1d} on-error={}
  :do {/ip firewall address-list remove [find list~"(temp|Scanners)" address=$"caller-id" dynamic]} on-error={}
}
在l2tp用的ppp profile內的On up event加上這段script
/interface 下, 在VPN連線上的時候會有多一組l2tp的interface, type是l2tp-in

[MikroTik] /interface> print
Flags: D - dynamic, X - disabled, R - running, S - slave
 #     NAME                                TYPE       ACTUAL-MTU L2MTU  MAX-L2MTU MAC-ADDRESS   
 7 DR  <l2tp-l2tp_user>                    l2tp-in          1450

所以這邊就是在On up的時候, 把/interface下, 有帶"in"得這組src ip加到mobile list, mobile list timeout 1天
然後把這組src ip從temp or Scanner移除
到這邊, 就有mobile list了

------------------
/system scheduler 新增: (scheduling, 1m)
:global vpn
:if ([:typeof $vpn]!="num") do={:set vpn 0}

:local total [/ip firewall mangle get [find chain=vpn-point action=add-src-to-address-list] byte]
:if ($vpn!=$total) do={:set vpn $total ; /system script run vpn-server}

新增一組script, 每一分鐘跑一次
去撈3.e標記的資料量, 如果跟上一次的資料量不相等, 就呼叫system script (如下)

-----------------
/system script 新增:
:global vpn
:local connected [/ip firewall address-list find list=temp dynamic]

:local scanners 0
:foreach i in=$connected do={
  :if ([/ip firewall address-list get $i timeout]<0:1:0) do={
    /ip firewall address-list add list=Scanners address=[get $i address] timeout=14d
    /ip firewall address-list remove $i ; :set scanners ($scanners+1)
  }
}
:if ([:len $connected]>$scanners) do={:set vpn ($vpn-1)}

把/ip firewall下的 所有的temp list都撈出來
如果temp list timeout值小於1分鐘, 就把此ip加到Scanners, 並把原本這temp list移除

-------------------------------
完整的動作會變成
1. 從外面來的udp port 1701,500,4500, ip A,嘗試連線
2. ip A會被先加到temp list (timeout 16分鐘)
3. 如果這次連線有成功, 觸發ppp On up script, ip A就會被移到mobile list(timeout 1天)
4. 下次連線, 如果還沒timeout, 就會被判出是mobile list, 被accept

如果是掃port的
1. 從外面來的udp port 1701,500,4500, ip B,嘗試連線
2. ip B會被先加到temp list (timeout 16分鐘)
3. 此次連線認證失敗, 不會觸發ppp On up script
4. scheduler script每一分鐘就會去看有多少資料量在3.e那個狀態, 如果跟上一次值不一樣就觸發system script
4. system script會去撈所有的temp list, 如果timeout value已經小於1分鐘, 就移到Scanner list(timeout 14天)

所以, 如果連線, 15分鐘內沒有成功, 就會被block 14天

RouterOS-架設VPN-l2tp/Ipsec, 用iOS連接

(更新, 有搭建IKEV2的範例, 可以參考 RouterOS-架設VPN-IKEV2, 用iOS連接

目的 : 建立l2tp/Ipsec VPN, 讓手機iOS可以連
Ref :
https://blog.ladsai.com/mikrotik-routeros-%E5%BB%BA%E7%BD%AE-l2tp-over-ipsec-vpn-server.html
https://omega.idv.tw/kdb120/viewthread.php?forumid=67&goto=lastpost
http://www.128px.com/2018/01/RouterOS-V641-2.html
Mikrotik : https://wiki.mikrotik.com/wiki/Manual:IP/IPsec#Basic_L2TP.2FIPsec_setup

目的 : 建立l2tp/Ipsec VPN, 讓手機iOS可以連

l2tp/Ipsec 須要三個資訊, 下面都是範例
l2tp帳號 : l2tp_user
l2tp密碼 : l2tp_pwd
Ipsec密鑰 : ipsec_pwd

網路環境基本資訊
社區網路
Pubilc IP : 111.222.333.444
Port : UDP-1701, 500, 4500已經有port forward到Router

Router上網設定(社區網路是固定ip, 這邊是網路公司提供)
Static IP : 192.168.99.20
Netmask : 255.255.255.0
Gateway : 192.168.99.254

內網Router設定
Router ip : 192.168.88.1
DHCP Server : 192.168.88.100-192.168.88.120
DNS : 168.95.1.1/8.8.8.8

1. 建立 VPN 網段
   Winbox > IP > Pool, 新增一組網段
   /ip pool
   add name=L2TP_VPN ranges=192.168.88.200-192.168.88.220

2. 建立給 L2TP 使用的 profile
   Winbox > PPP > Profiles, 新增profile
   name: L2TP_Profile
   local-address: 輸入你的 L2TP Server IP,也就是你的 RouterBoard IP。
   remote-address: 輸入你要分配給連入的 L2TP 連線的 IP,就是上面設定的網段L2TP_VPN

   /ppp profile
   add local-address=192.168.88.1 name=L2TP_Profile remote-address=L2TP_VPN use-encryption=required

   建立VPN Profile,use-encryption必須要是required或是Yes,否則有可能無法連線
   如果只是要存取內網的資源,DNS可以不必填,而如果是經過VPN上網或翻牆,DNS一定要填。

3. 建立 L2TP 連線用的帳號密碼
   Winbox > PPP > Secrets

   name : 帳號(l2tp_user)
   password : 密碼(l2tp_pwd)
   service : l2tp
   profile : 選上面建立出的L2TP_Profile
 
   /ppp secret
   add name=l2tp_user password=l2tp_pwd profile=L2TP_Profile service=l2tp

4. 啟動L2TP server,設定Ipsec共享金鑰。
   Winbox > PPP > Interface 有個L2TP Server

   default-profile : 選上面的L2TP_Profile
   ipsec-secret : ipsec密鑰(ipsec_pwd)

   /interface l2tp-server server
   set default-profile=L2TP_Profile enabled=yes ipsec-secret=ipsec_pwd use-ipsec=yes

5. 開啟對應的防火牆L2TP則是udp port 1701/500/4500。
   Winbox > IP > Firewall > Filter Rules
   新增一組filter rule, 接受由WAN(ether1_WAN)來的upd port 1701, 500, 4500 L2TP連線
   /ip firewall filter
   add action=accept chain=input comment="Accept L2TP VPN" dst-port=1701,500,4500 in-interface=ether1_WAN protocol=udp

6. 讓VPN連線後, 可以ping到內網的device
   須要對VPN連線進來ip做偽裝
   Winbox > IP > Firewall > Address Lists
   新增一組list, 192.168.88.200-192.168.88.220
   /ip firewall address-list
   add address=192.168.88.200-192.168.88.220 list=VPN

   Winbox > IP > Firewall > NAT
   新增一組NAT, srcnat, 由VPN ip來,但不是要到VPN ip的做偽裝
   /ip firewall nat
   add action=masquerade chain=srcnat comment="VPN NAT" dst-address-list=!VPN src-address-list=VPN

7. iOS設定
   設定 > 一般 > VPN > 加入VPN設定
   類型 : L2TP
   描述 : 自行取個名字, e.g. HomeVPN
   伺服器 : 社區網路的對外IP, 111.222.333.444
   帳號 : l2tp的帳號, l2tp_user
   密碼 : l2tp的密碼, l2tp_pwd
   密鑰 : ipsec密鑰, ipsec_pwd

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

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