因國家法律規定,部分內容已刪除,完整內容請查看文章末尾鏈接
Web 界面
一般 OpenWrt 安裝好之后會已經默啟用了 Web 管理界面(LuCI),默認地址是 192.168.1.1
,默認賬號是 root
,無密碼,直接點擊登錄即可進入
漢化
默認界面是英文的,可以在 系統-軟件 中搜索中文包安裝進行漢化
- 點擊
UPDATE LIST...
耐心等待軟件包的更新 - 然后在
Filter:
下的輸入框中輸入luci-i18n-base-zh-cn
,在篩選出來的結果中點擊INSTALL...
,安裝勾上Overwrite files from other package(s)
,然后點擊INSTALL
,耐心等待安裝完成之后刷新網頁(Ctrl+F5)可以看見大部分界面已經漢化了 - 同理安裝
luci-i18n-opkg-zh-cn
包用於 系統-軟件 界面的漢化 - 同理安裝
luci-i18n-firewall-zh-cn
包用於 網絡-防火牆 界面的漢化
root 密碼
進入管理界面后進入 系統-管理-密碼 界面修改路由器密碼,同時也是系統的 root 賬號的密碼
ssh
然后在 系統-管理-ssh 可以配置 ssh 登錄,參考配置如下
- 接口:不指定 → 內網以及外網都可以 ssh 登錄
- 端口:22 → ssh 默認端口,不做修改
- 密碼驗證:不勾選 → 推薦使用 ssh 登錄
- 允許 root 用戶憑密碼登錄:不勾選 → 推薦使用 ssh 登錄
- 網關端口:根據需要勾選
按照上面配置完成后將只能通過 ssh 密鑰進行登錄,所以還得在 系統-管理-ssh密鑰 添加設備的公鑰
升級 LuCI
ssh 登入路由器后執行以下命令:
# 更新軟件源
opkg update
# luci-compat 包有時可以幫助解決一些兼容性問題,推薦一同安裝
opkg install luci luci-base luci-compat
美化
原始的 bootstrap
主題個人不太喜歡,在空間足夠的情況下我個人額外安裝了 material
,主題的切換在 系統-系統-語言和界面 中
opkg update
opkg install luci-theme-material
銳捷認證
很多學校校園網通常采用銳捷認證,並且限制了用戶賬號的登陸數量,但是我們可以通過在路由器上進行銳捷認證來接入校園網,之后連接路由器的所有設備都會直接接入校園網而不需要認證了
MentoHUST
MentoHUST 是華中科技大學的 HustMoon 最初在校內 BBS 白雲黃鶴上發布的一款可以在 Linux 系統上進行銳捷認證的軟件。不過原始項目已經歸檔,不在開發,GitHub 上有加入 v4 支持的新項目
而在 OpenWrt 可以通過 Github 上的兩個項目手動編譯 .ipk
文件,然后 opkg install xxx.ipk
進行安裝即可
- 通過 MentoHUST-OpenWrt-ipk OpenWrt 項目可以生成
mentohust
的二進制文件 - 通過 OpenWrt/LEDE LuCI for MentoHUST 項目可以生成 MentoHUST 的 LuCI 控制界面
手動編譯 ipk
文件的過程可以參考這里
MiniEAP
MiniEAP 是一個實現了標准 EAP-MD5-Challenge 算法的 EAP 客戶端,支持通過插件來修改標准數據包以通過特殊服務端的認證。同時含有支持銳捷 v3 (v4) 算法的插件,可以用來進行銳捷認證
而在 OpenWrt 可以通過 Github 上的兩個項目手動編譯 .ipk
文件,然后 opkg install xxx.ipk
進行安裝即可
- 通過 minieap-openwrt 項目可以生成
minieap
的二進制文件 - (可選) 通過 OpenWrt/LEDE LuCI for minieap 項目可以生成 MiniEAP 的 LuCI 控制界面
補充:如果想要掉線自動重新認證,在配置文件中不要配置 no-auto-reauth
,參考該 minieap@issue#43
防火牆
開放端口
以開放 80 端口,用於外網直接訪問 Web 界面為例:
-
首先要在 網絡-防火牆-通信規則 點擊新增,進行如下配置
- 名稱:可以隨意設置
- 協議:根據需要進行選擇即可
- 源區域:選擇 WAN 表示是從外網進行訪問
- 源地址以及源端口:主要用於限制來訪的設備,可以根據需要進行配置
- 目標區域:選擇
設備
代表這是一個入站的規則 - 目標地址:因為是訪問設備,此時不需要配置
- 目標端口:Web 的默認端口是 80
- 操作:開放端口,當然是選擇接受
-
然后在 狀態-防火牆 根據需要對 IPv4、IPv6 防火牆進行重啟即可
如果這時外網還是不能訪問 LuCI 的 Web 界面,可以嘗試路由器重啟,確認路由器的 IP 是否能夠 ping 通,以及確認 80 端口有沒有被運營商封禁
端口轉發
以將 Windows 的遠程連接的端口 3389 為例:
-
首先要在 網絡-防火牆-端口轉發 點擊新增,進行如下配置
- 名稱:可以隨意設置
- 協議:根據需要進行選擇即可
- 源區域:選擇 WAN 表示是從外網進行訪問
- 外部端口:這里配置成 13389
- 目標區域:選擇
LAN
- 內部 IP 地址:配置成內網需要遠程連接的主機
- 內部端口:遠程連接的默認端口是 3389
-
然后在 狀態-防火牆 根據需要對 IPv4、IPv6 防火牆進行重啟即可
后續就可以通過訪問路由器 WAN_IP:13389
來遠程連接內網的 Windows 主機了
IPv6
在校園網環境下發現 WAN 口默認能自動獲取到 IPv6 地址(但是 /128 的地址),並且在路由器上測試也能正常訪問 IPv6 網站,但是局域網內的設備不能正常訪問 IPv6 網站,於是選擇 NAT6 的方式來解決
參考 官網的 NAT6 文檔,需要在路由器內依次進行如下配置:
-
安裝 kmod-ipt-nat6 包
# Install packages opkg update opkg install kmod-ipt-nat6
-
配置 IPv6 ULA 前綴,使得內網設備默認使用 IPv6
# Using IPv6 by default NET_ULA="$(uci get network.globals.ula_prefix)" uci set network.globals.ula_prefix="d${NET_ULA:1}" # 默認 network.lan.ip6assign 配置可能有誤,需要根據 ula_prefix 重新配置 IP6_ASSIGN="$(echo ${NET_ULA} | grep -E '(\d+)$' -o)" uci set network.lan.ip6assign="${IP6_ASSIGN}" uci commit network /etc/init.d/network restart
-
配置默認 IPv6 路由
# Announcing default IPv6 route uci set dhcp.lan.ra_default="1" uci commit dhcp /etc/init.d/odhcpd restart
-
配置防火牆
# Configure firewall uci set $(uci show firewall | sed -n -e "/\.name='wan'$/s//.masq6='1'/p" | sed -n -e "1p") uci set $(uci show firewall | sed -n -e "/\.name='Allow-ICMPv6-Forward'$/s//.enabled='0'/p" | sed -n -e "1p") uci commit firewall
# Configure firewall cat << "EOF" > /etc/firewall.nat6 # NAT6 + masquerading firewall script # https://github.com/akatrevorjay/openwrt-masq6 # trevorj <github@trevor.joynson.io> # # You can configure in /etc/config/firewall per zone: # * IPv4 masquerading # option masq 1 # * IPv6 masquerading # option masq6 1 # * IPv6 privacy extensions # option masq6_privacy 1 set -e -o pipefail . /lib/functions.sh . /lib/functions/network.sh . /usr/share/libubox/jshn.sh log() { logger -t nat6 -s "${@}" } get_ula_prefix() { uci get network.globals.ula_prefix } validate_ula_prefix() { local ula_prefix="${1}" if [ $(echo "${ula_prefix}" | grep -c -E -e "^([0-9a-fA-F]{4}):([0-9a-fA-F]{0,4}):") -ne 1 ] ; then log "Fatal error: IPv6 ULA ula_prefix=\"${ula_prefix}\" seems invalid. Please verify that a ula_prefix is set and valid." return 1 fi } ip6t() { ip6tables "${@}" } ip6t_add() { if ! ip6t -C "${@}" &> /dev/null; then ip6t -I "${@}" fi } nat6_init() { iptables-save -t nat \ | sed -e " /\sMASQUERADE$/d /\s[DS]NAT\s/d /\s--match-set\s\S*/s//\06/ /,BROADCAST\s/s// /" \ | ip6tables-restore -T nat } masq6_network() { # ${config} contains the ID of the current section local network_name="${1}" local device network_get_device device "${network_name}" || return 0 local done_net_dev for done_net_dev in ${DONE_NETWORK_DEVICES}; do if [ "${done_net_dev}" = "${device}" ]; then log "Already configured device=\"${device}\", so leaving as is." return 0 fi done log "Found device=\"${device}\" for network_name=\"${network_name}\"." if [ "${zone_masq6_privacy}" -eq 1 ]; then log "Enabling IPv6 temporary addresses for device=\"${device}\"." log "Accepting router advertisements on ${device} even if forwarding is enabled (required for temporary addresses)" echo 2 > "/proc/sys/net/ipv6/conf/${device}/accept_ra" \ || log "Error: Failed to change router advertisements accept policy on ${device} (required for temporary addresses)" log "Using temporary addresses for outgoing connections on interface ${device}" echo 2 > "/proc/sys/net/ipv6/conf/${device}/use_tempaddr" \ || log "Error: Failed to enable temporary addresses for outgoing connections on interface ${device}" fi append DONE_NETWORK_DEVICES "${device}" } handle_zone() { # ${config} contains the ID of the current section local config="${1}" local zone_name config_get zone_name "${config}" name # Enable masquerading via NAT6 local zone_masq6 config_get_bool zone_masq6 "${config}" masq6 0 log "Firewall config=\"${config}\" zone=\"${zone_name}\" zone_masq6=\"${zone_masq6}\"." if [ "${zone_masq6}" -eq 0 ]; then return 0 fi # IPv6 privacy extensions: Use temporary addrs for outgoing connections? local zone_masq6_privacy config_get_bool zone_masq6_privacy "${config}" masq6_privacy 1 log "Found firewall zone_name=\"${zone_name}\" with zone_masq6=\"${zone_masq6}\" zone_masq6_privacy=\"${zone_masq6_privacy}\"." log "Setting up masquerading nat6 for zone_name=\"${zone_name}\" with zone_masq6_privacy=\"${zone_masq6_privacy}\"" local ula_prefix="$(get_ula_prefix)" validate_ula_prefix "${ula_prefix}" || return 1 local postrouting_chain="zone_${zone_name}_postrouting" log "Ensuring ip6tables chain=\"${postrouting_chain}\" contains our MASQUERADE." ip6t_add "${postrouting_chain}" -t nat \ -m comment --comment "!fw3" -j MASQUERADE local input_chain="zone_${zone_name}_input" log "Ensuring ip6tables chain=\"${input_chain}\" contains our permissive DNAT rule." ip6t_add "${input_chain}" -t filter -m conntrack --ctstate DNAT \ -m comment --comment "!fw3: Accept port forwards" -j ACCEPT local forward_chain="zone_${zone_name}_forward" log "Ensuring ip6tables chain=\"${forward_chain}\" contains our permissive DNAT rule." ip6t_add "${forward_chain}" -t filter -m conntrack --ctstate DNAT \ -m comment --comment "!fw3: Accept port forwards" -j ACCEPT local DONE_NETWORK_DEVICES="" config_list_foreach "${config}" network masq6_network log "Done setting up nat6 for zone=\"${zone_name}\" on devices: ${DONE_NETWORK_DEVICES}" } main() { nat6_init config_load firewall config_foreach handle_zone zone } main "${@}" EOF cat << "EOF" >> /etc/sysupgrade.conf /etc/firewall.nat6 EOF
經過此步驟后會生成一個
/etc/firewall.nat6
腳本,並且加入了/etc/sysupgrade.conf
,保證系統升級后也不會丟失該腳本# Configure firewall uci -q delete firewall.nat6 uci set firewall.nat6="include" uci set firewall.nat6.path="/etc/firewall.nat6" uci set firewall.nat6.reload="1" uci commit firewall /etc/init.d/firewall restart
# Configure firewall uci set firewall.@zone[1].masq6="1" uci set firewall.@zone[1].masq6_privacy="1" uci commit firewall /etc/init.d/firewall restart
USB
很多路由器有 USB 端口,通過插入 U 盤或者接入磁盤、SSD 等設備可以拓展存儲空間,這樣就可以安裝更多的插件,或者搭建一個簡單的 FTP、SMB 服務器用於共享數據
安裝 USB 驅動
依次執行以下命令進行驅動基本包的安裝
opkg update
opkg install kmod-usb-core
insmod usbcore
opkg install kmod-usb-storage
如果設備是 USB 2.0
opkg install kmod-usb2
insmod ehci-hcd
如果設備是 USB 3.0
opkg install kmod-usb3
insmod xhci-hcd
通常移動硬盤或者移動 SSD 還需要安裝 UAS/UASP 支持
opkg install kmod-usb-storage-uas
然后熱插拔存儲設備,通常就能在 /dev
目錄下看見 sda
設備了
自動掛載
-
安裝塊設備工具包
opkg install block-mount
-
分區
個人已經提前將存儲設備划分了兩個分區,一個分區較小(sda5)用於后續的 Extroot,剩余的空間(sda6)全用於存儲個人數據
-
創建文件系統
推薦移動磁盤用 ext4 文件系統,而移動 SSD 推薦使用 f2fs 文件系統
分區和創建文件系統可以參考 官網的指導
-
配置掛載
配置掛載可以通過直接在網頁端的 系統-掛載點 進行手動配置,比較直觀,如圖所示:
- 已啟用:勾選
- UUID:推薦使用 UUID 來進行掛載
- 掛載點:也就是掛載的位置,通常在
/mnt
目錄下新建一個文件夾
Extroot
有時候安裝太多包會導致本地空間不足,此時可以通過將包安裝在 USB 設備上,也可以通過 Extroot 的方式將 USB 設備的空間直接配置成 overlay
分區,后者更為推薦
-
修改
fstab
,將原本掛載的overlay
設備掛載到新的目錄/rwm
DEVICE="$(sed -n -e "/\s\/overlay\s.*$/s///p" /etc/mtab)" uci -q delete fstab.rwm uci set fstab.rwm="mount" uci set fstab.rwm.device="${DEVICE}" uci set fstab.rwm.target="/rwm" uci commit fstab
-
修改
fstab
,配置 USB 設備掛載成overlay
分區其中部分部分操作在上節已經執行過,可以略去
# 查看分區信息 # block info # 確定分區並制作文件系統 DEVICE="/dev/sda5" # mkfs.ext4 ${DEVICE} eval $(block info ${DEVICE} | grep -o -e "UUID=\S*") uci -q delete fstab.overlay uci set fstab.overlay="mount" uci set fstab.overlay.uuid="${UUID}" uci set fstab.overlay.target="/overlay" uci commit fstab
-
將原本
overlay
分區數據復制到 USB 設備上,重啟設備mkdir -p /tmp/cproot mount --bind /overlay /tmp/cproot mount ${DEVICE} /mnt tar -C /tmp/cproot -cvf - . | tar -C /mnt -xf - umount /tmp/cproot /mnt reboot
FTP
配置好 USB 后,就可以配置 FTP 來共享 USB 設備
-
首先安裝 vsftpd 包
opkg install vsftpd
-
修改配置文件
/etc/vsftpd.conf
,這里給出個人的配置,可以參考background=YES listen=YES anonymous_enable=NO local_enable=YES write_enable=YES local_umask=022 check_shell=NO #dirmessage_enable=YES #ftpd_banner=Welcome to MINI FTP service. session_support=NO #syslog_enable=YES #userlist_enable=YES #userlist_deny=NO #userlist_file=/etc/vsftpd/vsftpd.users #xferlog_enable=YES #xferlog_file=/var/log/vsftpd.log #xferlog_std_format=YES ### ### TLS/SSL options ### example key generation: openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/vsftpd/vsftpd_privkey.pem -out /etc #ssl_enable=YES #allow_anon_ssl=NO #force_local_data_ssl=NO #force_local_logins_ssl=NO #ssl_tlsv1=YES #ssl_sslv2=NO #ssl_sslv3=NO #rsa_cert_file=/etc/vsftpd/vsftpd_cert.pem #rsa_private_key_file=/etc/vsftpd/vsftpd_privkey.pem # 共享的目錄位置 local_root=/mnt/ext4 pasv_enable=YES pasv_min_port=10090 pasv_max_port=10100
-
然后參考之前的開放端口,打開 20、21、10090-10100 端口就可以在外網訪問 FTP 服務器了
-
之后重啟
vsftpd
服務即可使用/etc/init.d/vsftpd restart
P.S. 連接 ftp 服務器的賬號密碼就是路由器的 root 賬號密碼
SMB
使用 Samba 來共享的設備可以在 Windows 的文件資源管理器中掛載,使用起來和本地磁盤一樣(在局域網內)
-
安裝 samba4-server 以及 LuCI 管理界面
opkg install samba4-server opkg install luci-app-samba4 luci-i18n-samba4-zh-cn
-
在網頁端的 服務-網絡共享 中進行配置,個人配置如下,可以參考
-
之后重啟
samba4
服務即可使用/etc/init.d/samba4 restart
P.S. 連接 Samba 服務器的賬號密碼也是路由器的 root 賬號密碼
BT 下載
transmission 是一個輕量級跨平台的 BT 下載客戶端
-
安裝 transmission
opkg install transmission-daemon opkg install transmission-cli opkg install transmission-web # web 界面,可選 opkg install transmission-remote opkg install luci-app-transmission luci-i18n-transmission-zh-cn
-
直接修改
/etc/config/transmission
,或者在網頁端的 服務-Transmission 進行配置,下面給出個人配置,可以參考config transmission option config_overwrite '1' option mem_percentage '50' option nice '10' option alt_speed_enabled 'false' option alt_speed_time_enabled 'false' option bind_address_ipv4 '0.0.0.0' option bind_address_ipv6 '::' option blocklist_enabled 'false' option cache_size_mb '2' option dht_enabled 'true' option download_queue_enabled 'true' option download_queue_size '4' option encryption '1' option idle_seeding_limit_enabled 'false' option lazy_bitfield_enabled 'true' option lpd_enabled 'false' option message_level '1' option peer_limit_global '240' option peer_limit_per_torrent '60' option peer_port '51413' option peer_port_random_on_start 'false' option peer_socket_tos 'default' option pex_enabled 'true' option port_forwarding_enabled 'true' option preallocation '1' option queue_stalled_enabled 'true' option queue_stalled_minutes '30' option ratio_limit '2.0000' option rename_partial_files 'true' option rpc_bind_address '0.0.0.0' option rpc_enabled 'true' option rpc_host_whitelist_enabled 'false' option rpc_port '9091' option rpc_url '/transmission/' option rpc_whitelist_enabled 'false' option scrape_paused_torrents_enabled 'true' option script_torrent_done_enabled 'false' option seed_queue_enabled 'false' option speed_limit_down_enabled 'false' option speed_limit_up_enabled 'false' option start_added_torrents 'true' option umask '18' option utp_enabled 'true' option scrape_paused_torrents 'true' option watch_dir_enabled 'false' option enabled '1' option user 'root' option group 'root' option upload_slots_per_torrent '10' option download_dir '/mnt/ext4/transmission' option incomplete_dir_enabled 'true' option incomplete_dir '/mnt/ext4/transmission/incomplete' option trash_original_torrent_files 'true' option rpc_authentication_required 'true' option rpc_username 'rpc_username' option rpc_password 'rpc_password' option ratio_limit_enabled 'true' option config_dir '/etc/transmission'
-
之后重啟
transmission
服務即可使用/etc/init.d/transmission restart
連接的賬號密碼為自行配置的 RPC
連接的賬號密碼
默認的 Web 界面 比較簡陋,並且不能配置 tracker,個人推薦使用
transgui 來 RPC
連接使用
如果需要遠程訪問,則需要將 rpc_port
配置的端口開放,具體流程參考 上文
參考資料
- 【OpenWrt】LuCI
- 【CSDN】luci.cbi 報錯
- 【Github】MentoHUST 加入 v4 支持
- 【Github】MentoHUST-OpenWrt-ipk
- 【Github】OpenWrt/LEDE LuCI for MentoHUST
- 【Github】MiniEAP
- 【Github】minieap-openwrt
- 【Github】OpenWrt/LEDE LuCI for minieap
- 【GitHub】no-auto-reauth 配置項的邏輯判斷有問題
- 【OpenWrt】firewall rules
- 【OpenWrt】防火牆配置舉例
- 【OpenWrt】IPv6 NAT6 配置
- 【OpenWrt】默認使用 IPv6
- 【OpenWrt】默認 IPv6 路由
- 【OpenWrt】安裝 USB 驅動
- 【OpenWrt】使用 USB 設備
- 【OpenWrt】Extroot 配置
- 【OpenWrt】FTP
- 【OpenWrt】Samba
- 【OpenWrt】transmission
本文作者: ywang_wnlo
本文鏈接: https://ywang-wnlo.github.io/posts/51140c4a.html
版權聲明: 本博客所有文章除特別聲明外,均采用 BY-NC-SA 許可協議。轉載請注明出處!