赞
踩
一般 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 账号的密码
然后在 系统-管理-ssh 可以配置 ssh 登录,参考配置如下
按照上面配置完成后将只能通过 ssh 密钥进行登录,所以还得在 系统-管理-ssh密钥 添加设备的公钥
ssh 登入路由器后执行以下命令:
# 更新软件源
opkg update
# luci-compat 包有时可以帮助解决一些兼容性问题,推荐一同安装
opkg install luci luci-base luci-compat
原始的 bootstrap
主题个人不太喜欢,在空间足够的情况下我个人额外安装了 material
,主题的切换在 系统-系统-语言和界面 中
opkg update
opkg install luci-theme-material
很多学校校园网通常采用锐捷认证,并且限制了用户账号的登陆数量,但是我们可以通过在路由器上进行锐捷认证来接入校园网,之后连接路由器的所有设备都会直接接入校园网而不需要认证了
首选,自动重连比 Minieap 靠谱得多!!!
MentoHUST 是华中科技大学的 HustMoon 最初在校内 BBS 白云黄鹤上发布的一款可以在 Linux 系统上进行锐捷认证的软件。不过 原始项目 已经归档,不在开发,GitHub 上有加入 v4 支持的 新项目
而在 OpenWrt 可以通过 GitHub 上的两个项目手动编译 .ipk
文件,然后 opkg install xxx.ipk
进行安装即可
mentohust
的二进制文件手动编译 ipk
文件的过程可以参考 这里
MiniEAP 是一个实现了标准 EAP-MD5-Challenge 算法的 EAP 客户端,支持通过插件来修改标准数据包以通过特殊服务端的认证。同时含有支持锐捷 v3 (v4) 算法的插件,可以用来进行锐捷认证
而在 OpenWrt 可以通过 GitHub 上的两个项目手动编译 .ipk
文件,然后 opkg install xxx.ipk
进行安装即可
minieap
的二进制文件补充:如果想要掉线自动重新认证,在配置文件中不要配置 no-auto-reauth
,参考该 minieap@issue#43
以开放 80 端口,用于外网直接访问 Web 界面为例:
首先要在 网络-防火墙-通信规则 点击新增,进行如下配置
设备
代表这是一个入站的规则然后在 状态-防火墙 根据需要对 IPv4、IPv6 防火墙进行重启即可
如果这时外网还是不能访问 LuCI 的 Web 界面,可以尝试路由器重启,确认路由器的 IP 是否能够 ping 通,以及确认 80 端口有没有被运营商封禁
以将 Windows 的远程连接的端口 3389 为例:
首先要在 网络-防火墙-端口转发 点击新增,进行如下配置
LAN
然后在 状态-防火墙 根据需要对 IPv4、IPv6 防火墙进行重启即可
后续就可以通过访问路由器 WAN_IP:13389
来远程连接内网的 Windows 主机了
在校园网环境下发现 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 端口,通过插入 U 盘或者接入磁盘、SSD 等设备可以拓展存储空间,这样就可以安装更多的插件,或者搭建一个简单的 FTP、SMB 服务器用于共享数据
依次执行以下命令进行驱动基本包的安装
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 文件系统
分区和创建文件系统可以参考 官网的指导
配置挂载
配置挂载可以通过直接在网页端的 系统-挂载点 进行手动配置,比较直观,如图所示:
/mnt
目录下新建一个文件夹有时候安装太多包会导致本地空间不足,此时可以通过将包安装在 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
配置好 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 账号密码
使用 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 账号密码
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
配置的端口开放,具体流程参考 上文
本文作者: ywang_wnlo
本文链接: https://ywang-wnlo.github.io/posts/51140c4a/
版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。