N66U 全改造,KMS Server、ARIA2、SWAP、SSR Server、SSH 安全

ASUS N66U 是個人買過最貴的 Router ,也是個人第一次認真學 Linux 指令的對像。
這邊記錄個人對它安裝的服務,包含 KMS 啟動用的 KMS Server 、ARIA2 下載器、掛載虛擬記憶體、翻牆工具等。

環境:ASUS N66U, Merlin 380.70


刷 Merlin

Asuswrt-Merlin 官網
Asuswrt-Merlin WIKI
因為有復原模式,所以不用擔心刷壞,第一次刷時需要等上五~十分鐘,請耐心等候。
選用 Merlin 版是因為其是唯一能繼續開啟 ASUS 硬體加速功能的版本。
之候有空再寫完整教學。
另外,N66U 的處理器是 Broadcom BCM4706,處理器架構是 MIPS 74K1,可用下列指令檢視

1
cat /proc/cpuinfo

硬體加速功能說明:NAT Acceleration On or Off

NAT Acceleration

待完成:

  1. SSR Server
  2. Setting up an NTP Server for your local lan https://github.com/RMerl/asuswrt-merlin/wiki/Setting-up-an-NTP-Server-for-your-local-lan

安裝 Entware

官方教學

  1. 先將隨碟格式化為 Ext3 格式後再插入,之後要作為內部空間來使用。
    • Ext4 只有在 Arm 機型才可使用。
  2. SSH 連入,下以下指令安裝環境
1
entware-setup.sh
會跳出安裝路徑選擇,輸入數字確定。如果沒有選項,代表第一步驟沒有成功。

Install Entware


安裝 KMS Server : vlmcsd

看到這個做法真是覺得非常腦洞大開!
介紹2

常用的 KMS 啟用伺服器程式為 py-kms 與 vlmcsd,分別為 python 和 C 語言版本。可執行於各種類 linux 和 windows 及 mac os 環境中。
vlmcsd 釋出地址
py-kms 釋出地址

開啟 jffs

  1. 開啟 jffs 和 ssh ,登入 n66u 管理介面,在 系統管理→系統設定,開啟 Format JFFS partition at next bootEnable JFFS custom scripts and configs
  2. 開啟 Enable SSH ,選 LAN only
  3. 重開路由器
  4. 進入管理介面,把 Format JFFS partition at next boot 取消

JFFS

安裝 vlmcsd

  1. 官網 下載 vlmcsd (下載 rgho.st 的) ,複製出執行檔 .
    arm 架構的路由器(AC68U)使用 vlmcsd-1112-2018-10-20-Hotbird64.7z\binaries\Linux\arm\little-endian\static\vlmcsd-armv7el-uclibc-static
    mips 架構的路由器(N66U)使用 vlmcsd-1112-2018-10-20-Hotbird64.7z\binaries\Linux\mips\little-endian\static\vlmcsd-mips32el-uclibc-static
  2. 將檔案重新命名為 vlmcsd,通過 xftp,winscp 等工具(連線類型還SCP,埠和 SSH 設定的一樣) 上傳到路由器 / jffs 目錄下

vlmcsd

  1. 右鍵修或通過 ssh 連線路由器,用以下指令賦予 vlmcsd 可執行許可權
1
chmod 700 /jffs/vlmcsd

chmod vlmcsd

  1. 啟動 vlmcsd
1
/jffs/vlmcsd

Windows 啟動

來源3
用系統管理員許可權輸入以下命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
::解除原先金鑰
slmgr.vbs -upk
::選擇金鑰,請依照底下的金鑰列表作選擇
slmgr.vbs -ipk W269N-WFGWX-YVC9B-4J6C9-T83GX
::設定KMS伺服器
slmgr.vbs -skms 192.168.1.1
::啟動
slmgr.vbs -ato
::顯示KMS相關資訊
slmgr.vbs -dlv

Windows Act

Windows 10 作業系統版本 KMS 客戶端設定金鑰
Windows 10 專業版 W269N-WFGWX-YVC9B-4J6C9-T83GX
Windows 10 Professional N MH37W-N47XK-V7XM9-C7227-GCQG9
Windows 10 企業版 NPPR9-FWDCX-D2C8J-H872K-2YT43
Windows 10 企業 N DPH2V-TTNVB-4X9Q3-TJR4H-KHJW4
Windows 10 教育 NW6C2-QMPVW-D7KKK-3GKT6-VCFB2
Windows 10 教育 N 2WH4N-8QGBV-H22JP-CT43Q-MDWWJ
Windows 10 企業版 2015 LTSB WNMTR-4C88C-JK8YV-HQ7T2-76DF9
Windows 10 Enterprise 2015 LTSB N 2F77B-TNFGY-69QQF-B8YKP-D69TJ
Windows 10 企業 2016 LTSB DCPHK-NFMTC-H88MJ-PFHPY-QJ4BJ
Windows 10 企業 2016 LTSB N QFFDN-GRT3P-VKWWX-X7T3R-8B639

Office 啟用

如果要將已安裝的 Retail(零售版) 轉換成 VLK (大量授權啟動版),要先做轉換
來源4
將以下內容另存成 activate.bat 再執行

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
38
39
40
41
42
43
44
45
@echo off
:ADMIN
openfiles >nul 2>nul ||(
echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
echo UAC.ShellExecute "%~s0", "", "", "runas", 1 >> "%temp%\getadmin.vbs"
"%temp%\getadmin.vbs" >nul 2>&1
goto:eof
)
del /f /q "%temp%\getadmin.vbs" >nul 2>nul
pushd "%~dp0"
cd /d %ProgramFiles%\Microsoft Office\Office16
cd /d %ProgramFiles(x86)%\Microsoft Office\Office16
cscript ospp.vbs /inslic:"..\root\Licenses16\ProPlusVL_KMS_Client-ppd.xrm-ms"
cscript ospp.vbs /inslic:"..\root\Licenses16\ProPlusVL_KMS_Client-ul.xrm-ms"
cscript ospp.vbs /inslic:"..\root\Licenses16\ProPlusVL_KMS_Client-ul-oob.xrm-ms"
cscript ospp.vbs /inslic:"..\root\Licenses16\ProPlusVL_MAK-pl.xrm-ms"
cscript ospp.vbs /inslic:"..\root\Licenses16\ProPlusVL_MAK-ppd.xrm-ms"
cscript ospp.vbs /inslic:"..\root\Licenses16\ProPlusVL_MAK-ul-oob.xrm-ms"
cscript ospp.vbs /inslic:"..\root\Licenses16\ProPlusVL_MAK-ul-phn.xrm-ms"
cscript ospp.vbs /inslic:"..\root\Licenses16\ProjectProVL_KMS_Client-ppd.xrm-ms"
cscript ospp.vbs /inslic:"..\root\Licenses16\ProjectProVL_KMS_Client-ul.xrm-ms"
cscript ospp.vbs /inslic:"..\root\Licenses16\ProjectProVL_KMS_Client-ul-oob.xrm-ms"
cscript ospp.vbs /inslic:"..\root\Licenses16\ProjectProVL_MAK-pl.xrm-ms"
cscript ospp.vbs /inslic:"..\root\Licenses16\ProjectProVL_MAK-ppd.xrm-ms"
cscript ospp.vbs /inslic:"..\root\Licenses16\ProjectProVL_MAK-ul-oob.xrm-ms"
cscript ospp.vbs /inslic:"..\root\Licenses16\ProjectProVL_MAK-ul-phn.xrm-ms"
cscript ospp.vbs /inslic:"..\root\Licenses16\VisioProVL_KMS_Client-ppd.xrm-ms"
cscript ospp.vbs /inslic:"..\root\Licenses16\VisioProVL_KMS_Client-ul.xrm-ms"
cscript ospp.vbs /inslic:"..\root\Licenses16\VisioProVL_KMS_Client-ul-oob.xrm-ms"
cscript ospp.vbs /inslic:"..\root\Licenses16\VisioProVL_MAK-pl.xrm-ms"
cscript ospp.vbs /inslic:"..\root\Licenses16\VisioProVL_MAK-ppd.xrm-ms"
cscript ospp.vbs /inslic:"..\root\Licenses16\VisioProVL_MAK-ul-oob.xrm-ms"
cscript ospp.vbs /inslic:"..\root\Licenses16\VisioProVL_MAK-ul-phn.xrm-ms"
cscript ospp.vbs /inpkey:XQNVK-8JYDB-WJ9W3-YJ8YR-WFG99
cscript ospp.vbs /inpkey:YG9NW-3K39V-2T3HJ-93F3Q-G83KT
cscript ospp.vbs /inpkey:PD3PC-RHNGV-FXJ29-8JK7D-RJRJK
cscript ospp.vbs /sethst:203.195.139.162
cscript ospp.vbs /act

可以用以下指令來驗證有無成功

1
cscript "C:\Program Files\Microsoft Office\Office16\OSPP.VBS" /dstatus

確認為 VLK 版後,依序使用以下指令啟動 OFFICE (自行確認路徑)

1
2
3
4
cd "%ProgramFiles%\Microsoft Office\Office16"
cscript ospp.vbs /sethst:192.168.1.1
cscript ospp.vbs /act
cscript ospp.vbs /dstatus

這四行為:

  1. 切換到 office2016 目錄
  2. 設定KMS Server地址為 192.168.1.1(即路由地址);3.
  3. 啟動
  4. 檢視啟動狀態。

自動啟用(尚末成功)

雖然經在路由器部署完成了 KMS 服務。但是我們卻需要在被啟用主機上執行批處理命令,是不是有點繁瑣呢,接下來通過配置 DNS 伺服器的 SRV 記錄實現被啟用主機接入區域網,不需要任何配置就可以啟用系統或 office。

merlin 固件的 dnsmasq 配置檔案為 / etc/dnsmasq.conf,新增自定義項需要開啟 jffs,在 /
jffs/configs/dnsmasq.conf.add 中新增 (詳見參考 2)。srv 記錄的格式參考 merlin 原始碼 dnsmasq 中
dnsmasq.conf.example(詳見參考 3)

  1. 通過 ssh 或 telnet 連線路由器,輸入命令新增 srv 記錄到 / jffs/configs/dnsmasq.conf.add.

其中 _vlmcs._tcp 為服務名;router 為路由在內網中的網路名稱(可通過 uname –n檢視);1688 為 kms 啟用服務預設端
號;

1
echo “srv-host=_vlmcs._tcp,router,1688”>>/jffs/configs/dnsmasq.conf.add

輸入命令 service restart_dnsmasq 重啟 dnsmasq 服務

  1. Windows 下使用管理員開啟命令提示符(cmd),使用命令 nslookup -type=srv _vlmcs_tcp 驗證 dns 配置是否正確
  2. 驗證 office 能不能成功發現 kms 伺服器,還是在管理員模式命令提示符(cmd)下執行以下命令(OFFIFC 路徑改為自已的)
1
2
3
4
cd "%ProgramFiles%\Microsoft Office\Office14"
cscript ospp.vbs /remhst
cscript ospp.vbs /act
cscript ospp.vbs /dstatus

其中第一行切換到 office 目錄,第二行表示清除之前設定的 kms 啟用伺服器地址,第三行手動啟用,第四行顯示啟用狀態。


掛載 NAS 路徑

來源10
Nas 要先開啟 NFS v4 服務

NFS v4 Service

SSH 連到 Router ,輸入以下指令。

  • mkdir 後方為要將 Nas 的資料夾掛載到的路徑
  • cifs 後方為 Nas 有開放共享的路徑
1
2
mkdir /mnt/nas
mount -t cifs "//192.168.1.241/Download" -o username=帳號,password=密碼 /mnt/nas

自動啟動

1
vi /jffs/scripts/post-mount

加入

1
2
mkdir /mnt/nas
mount -t cifs "//192.168.1.241/Download" -o username=帳號,password=密碼 /mnt/nas

ARIA2

官網
比原本內建的 ASUS Download Master 還好得多的下載器,快速、高效,特色有:

  • 多點下載
  • 多協定下載
  • 檔案分割下載
  • 使用代理伺服器
  • 使用 JSON-RPC、XML-RPC 遠端控制

安裝 ARIA2

主要參考來源5
請先確定 Entware 已經裝好

  1. 用以下指令安裝 Aria2,lighttpd,certificates to support SSL 和 php (這個對下一步要安裝的 GUI 並非必要)
1
opkg install aria2 ca-bundle ca-certificates lighttpd lighttpd-mod-fastcgi php7-fastcgi
  1. 安裝 WEB GUI for Aria2

webui-aria2 的安裝方式

1
2
3
4
wget -c -O /opt/tmp/webui-aria2.zip https://github.com/ziahamza/webui-aria2/archive/master.zip --no-check-certificate
unzip /opt/tmp/webui-aria2.zip -d /opt/tmp/
rm /opt/tmp/webui-aria2.zip
mv /opt/tmp/webui-aria2-master /opt/share/www/aria2

AriaNg6 的安裝方式

1
2
3
4
wget -c -O /opt/tmp/ariang.zip https://github.com/mayswind/AriaNg/archive/master.zip --no-check-certificate
unzip /opt/tmp/ariang.zip -d /opt/tmp/
rm /opt/tmp/ariang.zip
mv /opt/tmp/AriaNg-master /opt/share/www/ariang

或選擇自已喜歡的 GUI ,解壓後放置在 web server 對應的目錄 /mnt/磁碟機位置/entware/share/www/

YAAW
AriaNg .

  1. 設定 lighttpd for php and port 81:7
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
sed -i 's/#server.port = 81/server.port = 81/g' "/opt/etc/lighttpd/lighttpd.conf"
sed -i "/server.upload-dirs*/cserver.upload-dirs = ( \"/opt/tmp\" )" "/opt/etc/lighttpd/lighttpd.conf"
cat >> /opt/etc/lighttpd/conf.d/30-fastcgi.conf << EOF
server.modules += ( "mod_fastcgi" ) fastcgi.server = ( ".php" =>
( "localhost" =>
( "socket" => "/tmp/php-fcgi.sock",
"bin-path" => "/opt/bin/php-fcgi",
"max-procs" => 1,
"bin-environment" =>
( "PHP_FCGI_CHILDREN" => "2",
"PHP_FCGI_MAX_REQUESTS" => "1000" )
)
)
)
EOF
  1. 和原文不同,個人在 port 81 設定失敗,所以手動設定:
1
vi /opt/etc/lighttpd/lighttpd.conf

找到 #server.port =81,刪掉前面的註解符#,再按esc:wq存檔離開

lighttpd setting

  1. 設定 Aria2 的 conf,更改預設路徑或 RPC Token
1
vi /opt/etc/aria2.conf
  • 下載的路徑,個人這邊設定為掛載上的 Nas 空間
1
dir=/mnt/nas
  • RPC Token
1
rpc-secret=Passw0rd

Aria2 setting

  1. 啟動 aria2 和 lighttpd
1
2
/opt/etc/init.d/S81aria2 start
/opt/etc/init.d/S80lighttpd start

Aria2 Start

  1. 開啟瀏覽器,輸入(換成自已 router 的 IP 和 WEB GUI 資料夾名稱):192.168.1.1:81/aria2/
  2. 設定 Token ,以下舉兩種 WEB GUI 的範例
    1. webui-aria2:設定→連線設定→密碼令牌,輸入 Token ,預設:Passw0rd
    2. AriaNg:系統設定:AriaNg設定→RPC(192.168.1.1):Aria2 RPC 密鑰,輸入 Token ,預設:Passw0rd

WEB GUISetting01
WEB GUISetting02
WEB GUISetting03

自動啟動

修改 /jffs/scripts/post-mount 加入以下內容:

/jffs/scripts/post-mount
1
2
/opt/etc/init.d/S81aria2 start
/opt/etc/init.d/S80lighttpd start

Chrome 整合

安裝擴充功能 YAAW2 for Chrome

設定 Aria2 RPC 位置為 Router IP,Aria2 RPC 密鑰為 Token,預設:Passw0rd

Chrome ExSetting


虛擬記憶體 SWAP

使用下載器容易使用 Router 的記憶體用量大增,適當的使用虛擬記憶體能加強穩定性。

來源8,在 /jffs/scripts 下新增一個檔案 sdaswap ,編碼為 UTF-8 ,內容如下:

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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
#!/bin/sh
R_BOLD="\033[31m\033[1m"
G_BOLD="\033[32m\033[1m"
BOLD="\033[33m\033[1m"
NORM="\033[0m"
INFO="$BOLD Info: $NORM"
ERROR="$BOLD *** Error: $NORM"
INPUT="$BOLD => $NORM"
SWAP_FILE=`nvram get apps_swap_file`
SWAP_SIZE=`nvram get apps_swap_size`
i=1
cd /tmp
echo -e "$INFO 此脚本文件指导你创建虚拟内存"
echo -e "$INFO 默认创建的虚拟内存文件存放在 \"swap\" 文件夹并不可改变"
echo -e "$INFO 检查可用的挂载分区......"
for mounted in `/bin/mount |awk '{if($0 ~/mnt/){ print $3}}'` ; do
echo -e "$G_BOLD [$i] --> $mounted $NORM"
eval mounts$i=$mounted
i=`expr $i + 1`
done
if [ $i == "1" ] ; then
echo -e "$ERROR $R_BOLD 未找到挂载磁盘,执行退出。$NORM"
exit 1
fi
echo -en "$INPUT $BOLD 请输入磁盘分区序号或键入 0 退出程序 $NORM\n$BOLD[0-`expr $i - 1`]$NORM: "
read partitionNumber
if [ "$partitionNumber" == "0" ] ; then
echo -e $INFO 执行退出...
exit 0
fi
if [ "$partitionNumber" = "" ] || [ "`echo $partitionNumber|sed 's/[0-9]//g'`" != "" ] ; then
echo -e "$ERROR $R_BOLD 无效的参数,执行退出...$NORM"
exit 1
fi
if [ "$partitionNumber" -gt `expr $i - 1` ] ; then
echo -e "$ERROR $R_BOLD 分区序号无效,执行退出...$NORM"
exit 1
fi
eval entPartition=\$mounts$partitionNumber
echo -e "$INFO 已选择$G_BOLD $entPartition $NORM磁盘分区"
APPS_INSTALL_PATH=$entPartition/swap
case "$1" in
start)
mem_size=`free |awk '$0 ~/Swap/{print $4}'`
pool_size=`df |awk '{if($0 ~"'$entPartition'") {print $4}}'`
if [ $pool_size -gt $SWAP_SIZE ]; then
[ -e "$APPS_INSTALL_PATH/$SWAP_FILE" ] && swapoff $APPS_INSTALL_PATH/$SWAP_FILE
[ -d "$APPS_INSTALL_PATH" ] && rm -rf $APPS_INSTALL_PATH
echo -e "$INFO 建立虛擬記憶體資料夾: $APPS_INSTALL_PATH "
mkdir -p $APPS_INSTALL_PATH
echo -en "$INFO 默认虚拟内存大小: [$BOLD$SWAP_SIZE$NORM],新文件大小:\c $BOLD"
read answer
if [ "$answer" = "" ]
then
{
echo -e "$INFO 虚拟内存大小未改变"
}
else
{
if [ "$answer" != "" ] && [ "`echo $answer|sed 's/[0-9]//g'`" = "" ] && [ $answer -lt $pool_size ]
then
{
SWAP_SIZE=$answer
echo -en "$INFO 虚拟内存大小已改变: $BOLD[$SWAP_SIZE]$NORM \n"
}
else
{
echo -e "$ERROR $R_BOLD 无效的参数! $NORM"
exit 1
}
fi
}
fi
swap_count=`expr $SWAP_SIZE / 1000 - 1`
echo -e "$INFO dd if=/dev/zero of=$APPS_INSTALL_PATH/$SWAP_FILE bs=1M count=$swap_count"
dd if=/dev/zero of=$APPS_INSTALL_PATH/$SWAP_FILE bs=1M count=$swap_count
echo -e "$INFO 已创建虚拟内存文件: $APPS_INSTALL_PATH/$SWAP_FILE"
mkswap $APPS_INSTALL_PATH/$SWAP_FILE
echo -e "$INFO $G_BOLD 虚拟内存路径:$APPS_INSTALL_PATH/$SWAP_FILE $NORM"
swapon $APPS_INSTALL_PATH/$SWAP_FILE
echo -e "**********************************************************"
echo -e " ${G_BOLD}虚拟内存:$NORM 总计($G_BOLD$(free |grep -A1 "Swap" |awk '{print $2}')$NORM) 已用($G_BOLD$(free |grep -A1 "Swap" |awk '{print $3}')$NORM) 可用($G_BOLD$(free |grep -A1 "Swap" |awk '{print $4}')$NORM)"
echo -e "**********************************************************"
fi
echo -e "$INFO 是否创建启动项? y? :\c "
read yor
if [ "$yor" = "y" ]
then
{
[ -e "/jffs/scripts/services-start" ] && [ `cat /jffs/scripts/services-start |awk '{if($0 ~/swapon/) {print $0}}'|wc -l` -ge 1 ] &&\
sed -i 'N;/\n.*swapon/!P;D' /jffs/scripts/services-start && sed -i '/swapon/d' /jffs/scripts/services-start
[ ! -e "/jffs/scripts/services-start" ] && echo "#!/bin/sh" > /jffs/scripts/services-start
[ `grep "#!/bin/sh" /jffs/scripts/services-start |wc -l` -lt 1 ] && sed -i '1i#!\/bin\/sh' /jffs/scripts/services-start
sed -i '1asleep 30' /jffs/scripts/services-start
sed -i '2aswapon '$APPS_INSTALL_PATH'/'$SWAP_FILE'' /jffs/scripts/services-start
chmod 755 /jffs/scripts/services-start
echo -e "$INFO $G_BOLD开机启动项已创建! $NORM"
}
else
{
echo -e "$INFO $G_BOLD开机启动项未创建成功,执行退出... $NORM"
exit 1
}
fi
;;
stop)
[ -e "/jffs/scripts/services-start" ] && [ `cat /jffs/scripts/services-start |awk '{if($0 ~/swapon/) {print $0}}'|wc -l` -ge 1 ] &&\
sed -i 'N;/\n.*swapon/!P;D' /jffs/scripts/services-start && sed -i '/swapon/d' /jffs/scripts/services-start
[ -e "$APPS_INSTALL_PATH/$SWAP_FILE" ] && swapoff $APPS_INSTALL_PATH/$SWAP_FILE
[ -d "$APPS_INSTALL_PATH" ] && rm -rf $APPS_INSTALL_PATH
echo -e "**********************************************************"
echo -e " ${G_BOLD}虚拟内存:$NORM 总计($G_BOLD$(free |grep -A1 "Swap" |awk '{print $2}')$NORM) 已用($G_BOLD$(free |grep -A1 "Swap" |awk '{print $3}')$NORM) 可用($G_BOLD$(free |grep -A1 "Swap" |awk '{print $4}')$NORM)"
echo -e "**********************************************************"
;;
*)
exit 1
;;
esac

sdaswap1

在 sdaswap 檔案右擊滑鼠,屬性。設定為 0755 許可權 (該許可權是可讀寫、執行)
到此可以關閉 WinSCP 軟體。

sdaswap2

執行命令

1
/jffs/scripts/sdaswap start

指令碼自動掃瞄路由器外接的 USB 裝置,列出所有儲存類裝置供選擇使用哪個 USB 硬碟作為虛擬記憶體的載體。
支援 NTFS\EXT2,3,4
注意:建議使用高速隨身碟或者 SSD 硬碟,虛擬記憶體類似於普通記憶體,需要多次高速讀寫,整體速度取決於 USB 裝置的速度。這裡可以選擇虛擬記憶體的大小,預設為 33000=32M,可以設定為 64M=>65500。如果沒有特殊需求,建議使用預設大小。並不是越大越好,更大的虛擬記憶體容量 可能會拖慢系統速度。

載入成功後,自動載入 Swap 的資訊。Total 是總快取,Used 已使用,Free 未使用
如果 Total 顯示為 0 證明沒有載入成功或者已關閉虛擬記憶體功能。
最後一行是提示是否載入到開機啟動項。y 回車是新增到啟動項。

停用虛擬記憶體功能命令:

1
/jffs/scripts/sdaswap stop

掃瞄 USB 裝置,選擇要停用哪個裝置的虛擬記憶體。Swap: Total 顯示 0,證明已經停用虛擬記憶體


SSR Server

待補
https://www.mobile01.com/topicdetail.php?f=110&t=5165732


NTP Daemon

網路校時守護程序
網路校時守護程序 安裝
比內建的 NTP 使用更少的 RAM 且更有效率,並提供圖示介面。

  1. Entware 要先裝好。
  2. 以下以 ARM 為範例,mips 請參考原文作修改
  3. 安裝 rrdtool 和 wget
1
2
opkg install rrdtool
opkg install wget
  1. Copy /www to /opt/var/www in preparing WebGUI to run from /opt/var/www
1
tar cf - /www | tar -C /opt/var -xvf -
  1. install the package
1
wget --no-check-certificate -O - https://github.com/kvic-z/goodies-asuswrt/blob/master/ntpd_stats-arm-R3-1.tar.gz?raw=true | tar -C / -xzf -
  1. Run the following command to manually start ntpd as litmus test
1
cp /jffs/configs/fstab /etc; mount -a
1
/opt/etc/init.d/S77ntpd-custom start
1
/jffs/bin/ntpstats.sh
1
mount -a /opt/var/www /www
  1. (FW version>= 380.68) Patch files for WebUI and restart httpd
1
cp /opt/var/spool/ntp/Tools_NtpdStats.asp /www
1
sed -i '/"Tools_OtherSettings.asp", tabName: "Other Settings"/a {url: "Tools_NtpdStats.asp", tabName: "NTP Daemon"},' /www/require/modules/menuTree.js
1
service restart_httpd

Stop and check if any error. If things go well, you shall see NTP Daemon on WebUI > Tools page.

  1. Create a cron job to collect NTPD stats. Add the following line to /jffs/scripts/services-start
/jffs/scripts/services-start
1
cru a NtpdStats "*/5 * * * * /jffs/bin/ntpstats.sh"
  1. Append the following two lines to the end of /jffs/scripts/post-mount
/jffs/scripts/post-mount
1
2
mount -a
service restart_httpd
  1. Reboot your router and enjoy!
    Check the “server” entries in /jffs/etc/ntp.conf. You may want to replace those ip addresses with time servers near you. Preferrably put some stratum 1 servers there.

    要一點時間自動重整後圖示才會有變化,重整時要按F5清快取才可以看到更新。


SSH 安全性

SSH 連線故然方便,但網路上很多自動程序在掃描這個服務,提升安全性有以下方向可設定

  1. LAN only:只允許內網連線,外網的攻擊除非是有漏洞否則是可乎略的
  2. SSH service port :不要用預設的 port 號,自行修改。
  3. Enable SSH Brute Force Protection :對暴力破解密碼進行防禦
  4. 啟用 SSH 金鑰認證並禁止密碼登入

Secure Setting

這邊記錄 SSH 金鑰的設定方式。

生成 SSH 金鑰

參考來源9

  1. 安裝 Git for win 後,應該就能執接使用下列指令生成金鑰
1
ssh-keygen

在產生金鑰的過程中,會詢問一些問題,對於一般的使用者而言,全部都使用預設值(直接按下 Enter 鍵)即可。

Generating public/private rsa key pair.
Enter file in which to save the key (%userprofile%/.ssh/id_rsa):

首先指定金鑰儲存的位置,使用預設值即可,通常是在使用者資料夾 %userprofile% ,直接按下 Enter 鍵。

Enter passphrase (empty for no passphrase):

指定金鑰保護密碼,如果有設定密碼的話,以後每次使用都要輸入密碼,除你需要非常高的安全性,否則就不用設定了,直接按下 Enter 鍵即可。

Enter same passphrase again:

再次輸入密碼,直接按下 Enter 鍵,接著就會產生金鑰了。

Your identification has been saved in %userprofile%/.ssh/id_rsa.
Your public key has been saved in %userprofile%/.ssh/id_rsa.pub.
The key fingerprint is:
c7:61:98:72:02:91:94:db:12:96:05:9d:59:91:aa:25 seal@seal-desktop
The key's randomart image is:
+--[ RSA 2048]----+
|   .=O.+oo       |
|    *.+ .o       |
|   . +o.+ o      |
|    E ++ o .     |
|     =  S o      |
|    .    .       |
|                 |
|                 |
|                 |
+-----------------+

這裡會顯示金鑰的指紋(fingerprint)與 randomart,而產生的金鑰會有兩個檔案:

  • id_rsa.pub:公開金鑰(public key),這是可以對外公開的金鑰,之後要將它放在遠端的 Router 上作認證使用。
  • id_rsa:私密金鑰(private key),這是要保護好的金鑰,它等同於你的密碼,放在自己的電腦中。

設定 Router

  1. 用文字編輯器開啟 id_rsa.pub,位置預設在 %userprofile%/.ssh,複製所有的內容。
  2. 開啟 n66u WEB 介面,到系統管理→系統設定:SSH Authentication key,把公鑰 id_rsa.pub 內容全部貼上,套用設定。

    可以 SSH 連入 Router 後,用 cat ~/.ssh/authorized_keys 檢查

n66u ssh-au key

設定 Client 端

原理相同,這邊記錄個人所用的軟體設法。

Token2Shell:

  1. ADDRESS BOOK :對 Router 的登入方式要改為 Publickey
  2. PRIVATE KEYS :按下方的加號,匯入私鑰 %userprofile%/.ssh/id_rea,如此再連線時即會自動使用。

Token2Shell Setting01
Token2Shell Setting02

WinSCP

  1. 在連線介面,選擇進階→SSH→身份校對,在身份核對參數那欄點選擇私鑰 %userprofile%/.ssh/id_rea
  2. 會跳出“是否就此 OpenSSH 私鑰轉換為 PuTTY 格式?”,確定即可,跳出回到連線介面後記得按儲存

WinSCP Setting01
WinSCP Setting02

關閉 SSH 密碼登入

確認都可正常登入後,回到 Router WEB GUI 介面,關閉 Allow SSH password login 即可。

Disable SSH password login


使用 Adblock Plus Filter 對特定設備做廣告過濾 (連結過時,暫時無法安裝中)

官方不建議過濾 PC ,會造成設備性能下降。

安裝

1
opkg install bash wget sed privoxy

設定

1
2
3
4
5
cd /opt/etc/privoxy/
rm ./config
wget http://files.ryzhov-al.ru/Routers/adblock-plus/config
wget http://files.ryzhov-al.ru/Routers/adblock-plus/privoxy-blocklist_0.2.sh
chmod +x ./privoxy-blocklist_0.2.sh

設定 list

1
vi ./privoxy-blocklist_0.2.sh

找到 URLS=,後面改為 https://easylist-downloads.adblockplus.org/easylistchina+easylist.txt

list

設定靜態 IP

到 DHCP 介面設定手動分配,可以用以下指令確認分配結果

1
2
cat /etc/hosts.dnsmasq
cat /var/lib/misc/dnsmasq.leases

在 iptables 添規則,攔截設備的流量並通過 privoxy 過濾廣告

--source 後方的網址改為要套用的設備IP

1
2
3
echo "#!/bin/sh" > /jffs/scripts/firewall-start
echo "iptables -t nat -A PREROUTING --source 192.168.1.21 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 3128" >> /jffs/scripts/firewall-start
chmod +x /jffs/scripts/firewall-start

如果要套用一個網段,第二行指令請改為

1
echo "iptables -t nat -A PREROUTING -m iprange --src-range 192.168.1.21-192.168.1.30 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 3128" >> /jffs/scripts/firewall-start

Client 設置

設定 Proxy 為 192.168.1.1 通訊埠為 3128 ,重開機即可。

更改訂閱、自動更新

如果要添加新訂閱列表,需先刪除舊訂閱

1
./privoxy-blocklist_0.2.sh -r

如果要手動更新更新,直接執行下列指令

1
./privoxy-blocklist_0.2.sh

要自動更新,編輯/jffs/scripts/init-start加入以下命令(每日凌晨 4 點更新)

1
cru a ScheduledReboot "0 4 * * * /opt/etc/privoxy/privoxy-blocklist_0.2.sh"
------ THE END ------