2020年3月28日 星期六

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

目前網頁上的廣告越來越多

為了不想看到這些廣告, 可以透過自行架設Pi-Hole來檔掉部分的廣告
Pi-Hole就是透過DNS的方式來檔掉已知的廣告網址
好處是, 他會自動更新black list

如何讓Pi-Hole為你擋廣告, 可以分為兩段,
1. 架設Pi-Hole
2. 設定原本Router裡面的DNS改由Pi-Hole處理

<<1. 架設Pi-Hole>>
這邊因為我已經有Synology NAS, 所以就透過NAS上的docker來跑Pi-Hole
參考網址 :
https://www.jkg.tw/p157/
https://medium.com/@moreless/install-pi-hole-docker-on-synology-to-remove-ads-84bc92d9078d
https://mariushosting.com/how-to-install-pi-hole-on-your-synology-nas/
圖文可以參考上面連結

下面僅用文字記錄自己的安裝過程
1. DMS 套件中心 > 安裝docker套件
2. 開啟docker
3. docker > 倉庫伺服器  > 搜尋"pihole" > 下載 "pihole/pihole" 這個image
4. docker > 映像檔 > 選擇剛剛下載的pihole > 佈署 > 進階設定
    a. 進階設定 > 勾選 自動重啟
    b. 儲存空間 > 新增資料夾
        /docker/pihole/config > 掛載路徑 /etc/pihole/
        /docker/pihole/dnsmasq.d > 掛載路徑 /etc/dnsmasq.d/
    c. 網路 > 勾選 與docker host使用相同網路
    d. 環境設定,
        新增 > WEB_PORT, value = pihole網頁service的port, 可以用80或是換成其他(e.g. 11111)
        新增 > WEBPASSWORD, value = 登入pihole網頁的密碼(e.g. 22222)
        新增 > TZ, value = Asia/Taipei, 設定時區, pihole會在半夜起來更新list
        修改 > ServerIP, value = NAS在區網上的ip, (e.g. 192.168.0.88)
    e. 設定完成, 點選套用, 並打勾設定完成後啟動
    f. docker > 容器, 看看剛剛設定的有沒有跑起來了
 5. 在瀏覽器網址列輸入 http://ServerIP:WEB_PORT/admin就可以開始pihole的管理頁面
      e.g. http://192.168.0.88:11111/admin
 6. 網頁上的左邊, 有LogIn, 點選後, 輸入WEBPASSWORD即可登入(e.g. 22222)
 7. Pi-Hole設定完成


<<2. 設定路由器, 讓DNS改為pihole>>, 以RouterOS為例
更新 : 如果你是使用RouterOS的Router, 可以參考下面兩篇就好了, 比較完善
    RouterOS設定DNS Server
    RouterOS內動態確認DNS Server是否正常, 並切換設定

1.  Winbox > IP > DNS
     DNS Server : 設為pihole的IP (e.g. 192.168.0.88)
             這邊我有設定第二組(Google DNS 8.8.8.8), 想法是說如果pihole掛了, 起碼這裡還出的去
2. Winbox > IP > DHCP Server > Networks
     DNS Server : 設為pihole的IP (e.g. 192.168.0.88)
     這樣可以讓DHCP client來拿ip的時候, 拿到這組DNS回去

這樣, 應該基本效果就可以了
但是後來看到有網路上提到, 如果client端自己寫死DNS, 那就會繞掉剛剛的設定
所以透過NAT, 強制轉到pihole

Ref : https://www.reddit.com/r/pihole/comments/5g249i/tip_redirect_all_dns_to_pihole_with_mikrotik/

做dstnat, 把tcp/udp port53, dst/src address非pihole, 都導向iphole
;;; redirect DNS to PiHole
chain=dstnat action=dst-nat to-addresses=192.168.0.88 protocol=udp src-address=!192.168.0.88 dst-address=!192.168.0.88 dst-port=53
chain=dstnat action=dst-nat to-addresses=192.168.0.88 protocol=tcp
src-address=!192.168.0.88 dst-address=!192.168.0.88 dst-port=53
Hairpin, 我是沒有對外ip, 所以就沒做了
All DNS queries to PiHole shall appear to come from the router
3 ;;; hairpin NAT for PiHole
chain=srcnat action=masquerade protocol=udp src-address=192.168.1.0/24 dst-address=192.168.1.2 dst-port=53 4 chain=srcnat action=masquerade protocol=tcp src-address=192.168.1.0/24
dst-address=192.168.1.2 dst-port=53

2016年6月12日 星期日

NuBrick -- Android App Setup Env.

1. download 相關source code : 牛臥堂
2. 安裝Android Studio, JDK







3. 裝好後,把剛剛NuBrick抓的code, 解開APP的Source code
SW_NuMakerBrick_V1.2.zip\SW_NuMakerBrick_V1.2\NuMakerBrick_APP



Android studio去開啟Project, 選到\nubrickapp
















4. 開起來之後,會有Error






解法參考 Stackflow
開啟nubrickapp\gradle\wrapper\gradle-wrapper.properties
    修改
distributionUrl=https\://services.gradle.org/distributions/gradle-2.8-all.zip





 
修改nubrickapp\build.gradle
classpath 'com.android.tools.build:gradle:1.5.0'





Don't click Sync Now
From menu choose File -> Invalidate Caches/Restart...
Choose first option: Invalidate and Restart
Android Studio would restart. After this, it should work normally
5. 重開後,新的Error





MENU > Tools > Android > SDK Manager
把Android 5.1 (Lolipop) 22 打勾, Apply, 接下來會安裝API Lv22的SDK
裝好後,MENU > Build > Clean Project
會有另外一個Error, 找不到Build Tool 22.0.1, 提示框有Install的按鈕, 按下去裝
裝好後,MENU > Build > Clean Project  這次會跑比較久

這樣應該就可以Build了

Build tool可以看
1. C:\Users\USERNAME\AppData\Local\Android\sdk\build-tools

2016年6月7日 星期二

Source Insight 設定

1. 背景顏色--豆沙綠(C7EDCC, 199, 237, 204)
    Options->Preferences->Color->Window Background
2. 等寬字體
     Options->Document Option->Screen Font = Consolas
3. 將tabr鍵改為多格空白
    Options->Document options
      a. 先打勾Expand tabs
      b. 裡面的editing options群組有 Tab width
        利用這個可以更改tab為多格空白


4. 建立project時,添加特定類型的文件(文件類型過濾器)
    Options->Document Options裡面,的File filter裡可以改(;*.cpp)

5. 增加快速註解Macro
Project/Open Project...
打開Base Project("我的文件/Source Insight/Projects/Base"中);
Project/Add and Remove Project Files...
加入Macro文件(即utils.em);
Options/Menu Assignments
打開Menu Assignments視窗,在Command中輸入Macro,選中要使用的Macro,添加到合適的選單中.
推薦使用的Macro:Comment、InsFileHeader、InsFunHeader、InsHeaderDef、InsIfdef和AutoExpand (為代碼自動補全功能,建議建快捷鍵)。

2016年5月29日 星期日

NodeMCU v2 - 2. 上傳資料到Thingspeak with Lua script

參考這邊 - POSTING TO THINGSPEAK WITH ESP8266 AND NODEMCU

1. 先下載 NodeMCU studio, 主要是用來上傳Lua script到板子上
2. 插入板子到NB, 開啟NodeMCU studio
3. 按下重新整理, 確認有沒有掃到COM port, 掃到後按上連接
4. 把下方的code, 存成Test.lua, 編輯SSID/密碼/Thingspeak API, 然後再NodeMCU studio開啟這個檔案
5. 按下上傳, 這時候會把剛剛開啟的Test.lua上傳到NodeMCU
6. 按下執行, 這邊會先列出板子上有的script, 然後彈出視窗看要執行哪一個
7. 接下來就會一直上傳電壓到Thinkspeak了



Source code is referenced from - POSTING TO THINGSPEAK WITH ESP8266 AND NODEMCU

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
wifi.setmode(wifi.STATION);
wifi.sta.config("SSID" ,"WIFIKEY");
 
function postThingSpeak(level)
    connout = nil
    connout = net.createConnection(net.TCP, 0)
 
    connout:on("receive", function(connout, payloadout)
        if (string.find(payloadout, "Status: 200 OK") ~= nil) then
            print("Posted OK");
        end
    end)
 
    connout:on("connection", function(connout, payloadout)
 
        print ("Posting...");
 
        local volt = node.readvdd33();     
 
        connout:send("GET /update?api_key=CHANNEL_API_KEY&field1=" .. (volt/1000) .. "." .. (volt%1000)
        .. " HTTP/1.1\r\n"
        .. "Host: api.thingspeak.com\r\n"
        .. "Connection: close\r\n"
        .. "Accept: */*\r\n"
        .. "User-Agent: Mozilla/4.0 (compatible; esp8266 Lua; Windows NT 5.1)\r\n"
        .. "\r\n")
    end)
 
    connout:on("disconnection", function(connout, payloadout)
        connout:close();
        collectgarbage();
    end)
 
    connout:connect(80,'api.thingspeak.com')
end
 
tmr.alarm(1, 60000, 1, function() postThingSpeak(0) end)

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

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