企業網路服務搭建(一)OpenWRT uhttpd ddns firewall wireguard

上官飞鸿發表於2024-10-12

簡介:

最近要給媳婦的企業重新搞一搞資訊化,這個也寫個系列文章吧。

為什麼要寫openwrt呢?小公司,搞不起託管、搞不起上雲。也不算搞不起,主要是自己手邊各種垃圾材料多啊。自己家,公司,父母家,3處家用寬頻。

本著垃圾佬的心態,能省則省。其實更多的是模擬大型異地辦公需求的一種探索。

OpenWR:

開源免費的一個路由系統,玩的比較多,功能比較多,能刷openwrt的路由器也挺多。價格還實惠。它將是各個節點的接入系統,雖然還有一些更高階的pfSense OPNsense,在初級階段,我還是會考慮openwrt的。

本例使用裝置如下

家裡:

型號 Xiaomi Redmi Router AC2100
架構 MediaTek MT7621 ver:1 eco:3
目標平臺 ramips/mt7621
韌體版本 OpenWrt 23.05.5 r24106-10cc5fcd00

辦公室:

型號 Phicomm K2P
架構 MediaTek MT7621 ver:1 eco:3
目標平臺 ramips/mt7621
韌體版本 OpenWrt 23.05.2 r23630-842932a63d

uHTTPd:

幹嘛搞這個呢?openwrt是有web管理的,不用苦哈哈的在命令列視窗乾。為了透過internet遠端管理檢查路由,我們受運營商的限制,80、443是無法訪問的。所以需要修改openwrt預設的web伺服器uhttpd的埠。用來實現遠端網際網路管理。

而且我3條寬頻,最後申請的這條是怎麼投訴都不開IPV4公網地址了。還要為未來考慮,直接ipv6組網了。

安裝:

雖然openwrt預設已安裝uhttpd,但是它沒安裝luci-app-uhttpd,也就是沒有web控制介面,所以需要安裝一下,可以web更新列表,搜尋uhttpd,找到luci-app-uhttpd安裝,也可以ssh上去 opkg update && opkg install luci-app-uhttpd。

安裝完畢以後,可能需要退出登陸,重新登陸才能出現選單。

新增監聽埠

我新增了18080、18443兩個ipv6的監聽埠。ipv4的前面是0.0.0.0:,ipv6的前面是[::]:

重新啟動uhtpd

測試:

找到路由獲取的ipv6地址,帶上埠號測試一下是否可以訪問。

裝置--介面,隨便複製一個ipv6地址,帶協議和埠訪問測試。

不好複製,就點一下右上角的重新整理變為暫停

我測試的地址是

http://[240e:xxxx:xxxx::1]:18080
https://[240e:xxxx:xxxx::1]:18443

可以正常訪問就好了。

DDNS

我說了,三條家用寬頻,這是沒有固定IP地址的,還得上ddns,你們喜歡用什麼我管不了,為了我的個人習慣和需求,我寫了一個cloudflare-ddns。

jackadam1981/cloudflare-ddns (github.com)

順便將用法寫在這裡。

單檔案,shell指令碼,支援cloudflare,更靈活。

安裝

僅需要一個檔案raw.githubusercontent.com/jackadam1981/cloudflare-ddns/refs/heads/main/ddns.sh

我一般複製到/root/cfddns/ddns.sh

token令牌

要跟cloudflare一起用,需要有cloudflare的tokenAPI 令牌 | Cloudflare在這個頁面註冊一個新的令牌

使用DNS模板

編輯下令牌名稱,選擇所有區域,繼續

建立令牌

這個令牌只顯示一次,存入keepass(用了十多年的跨平臺雲密碼管理軟體)吧。

指令碼加許可權

在你存ddns.sh的目錄下給這個指令碼增加執行許可權。

chmod +x ddns.sh

初次執行指令碼

直接執行當前目錄的ddns.sh

./ddns.sh

執行指定目錄的ddns.sh

/root/cfddns/ddns.sh

依賴

雖說是純shell實現,但是也依賴jq json編解碼 curl 網路請求兩個包。

如果系統沒有這兩個包,會提示你安裝,並給出安裝命令。

配置檔案

這個就是重點講一下的了。

很多動態域名,我並不知道它提交的IP是怎麼來的,也不瞭解過程,這也是我寫這個指令碼的原因之一。

'{
    "settings": {
        "log_level": "debug,info",
        "arIp6QueryUrl": "https://6.ipw.cn",
        "arIp4QueryUrl": "https://4.ipw.cn",
        "log_header_name": "DDNS"
    },
    "domains": [
        {
            "domain_name": "example1.com",
            "zone_id": "",
            "auth_email": "your_email@example.com",
            "auth_key": "your_auth_key1",
            "auth_key_valid": false,
            "records": [
                {
                    "name": "subdomain1",
                    "type": "A",
                    "proxy": false,
                    "local": true,
                    "nic_name": "eth0"
                },
                {
                    "name": "subdomain2",
                    "type": "AAAA",
                    "proxy": true,
                    "local": false,
                    "nic_name": "eth0"
                }
            ]
        },
        {
            "domain_name": "example2.com",
            "zone_id": "",
            "auth_email": "your_email@example.com",
            "auth_key": "your_auth_key2",
            "auth_key_valid": false,
            "records": [
                {
                    "name": "subdomain3",
                    "type": "A",
                    "proxy": false,
                    "local": true,
                    "nic_name": "eth1"
                }
            ]
        }
    ]
}'
log_level:可以寫debug,可以寫info,debug會顯示更多的資訊給你,info就寫簡單的資訊給你。
arIp6QueryUrl:線上獲取ipv6地址的網站
arIp4QueryUrl:線上獲取ipv4地址的網站
log_header_name:日誌記錄頭,在選擇行讀取日誌時很有用
domains:域名相關設定,可以有多個域名,示例檔案是兩個域名。
domain_name:域名的名字,就是你註冊的那個名字
zone_id:cloudflare對域名的識別號,不用填,會自動獲取並快取
auth_email:忘記了,應該是不用填的
auth_key:剛才申請的token,或許改成token更好,有空改指令碼再說。
auth_key_valid:驗證過沒有,預設false,指令碼自己會檢測這個token是否有效可用,如果可用會自動改true
name:子域名,就是你想註冊的主機名
type: A 或 AAAA IPV4 或 IPV6
proxy:白嫖的CDN加速,ddos防火牆,開不開隨便你了。
local:是否使用本地網路卡地址,true使用本地網路卡地址,需配套下面的nic_name
nic_name:如果使用本地網路卡地址,多網路卡時用哪個網路卡?寫網路卡名,一般是 ip addr 顯示的網路卡名。

這就是我為了自己的靈活使用設計的ddns指令碼。
可以在一個主機上管理多個域名,主機名,是否開彩雲代理,是否用本地地址,本地用哪個網路卡,隨意組合。

定時執行

cron定時任務還是web寫吧

系統--計劃任務

*/10 * * * * /root/cfddns/ddns.sh

每10分鐘執行一次。

防火牆

以前都苦巴巴的求爺爺告奶奶,申請個公網IPV4,然後埠轉發。

現在IPV6也能用了,幾乎不見純IPV4的路由器了,我們就不做埠轉發了。

我們直接用防火牆通訊規則,放行指定埠的流量好了。

網路--防火牆--通訊規則

我寫了個Allow_local,意思是允許本機的流量

允許從wan到本裝置 22 18080 18443埠流量的轉發。

相關文章