小米路由硬盘版搭建 ftp 服务和博客
想入手 NAS 很久了,元旦时看了看群晖,还是一如既往的贵。想想还是觉得肾疼,还是想办法把家里的小米路由器折腾折腾,之前买了个硬盘版本(1T 硬盘)。所以决定先获取一下路由器的高级管理权限。
对了,我的路由器长这个样子:
小米路由对应的是 OpenWRT 系统,是一个嵌入式的 Linux 发行版。
公网访问效果
小米路由安装好 frp 之后,配置相应的端口映射,就可以外网访问了。
FTP 服务测试
使用 FileZilla 的被动模式进行测试(FileZilla 客户端可以搜索文件哈,真的很方便):
iPhone 上也能访问,杠杠的:
博客效果测试
外网实测,可以登录 admin 账号来创建文章:
在开始配置之前,首先获取路由器的高级管理权限:
开启 SSH 工具
登录如下地址,下载开启 SSH 工具需要的 bin 文件:http://d.miwifi.com/rom/ssh
工具包使用方法:
请将下载的工具包 bin 文件复制到 U 盘(FAT/FAT32 格式)的根目录下,保证文件名为 miwifi_ssh.bin;
断开小米路由器的电源,将 U 盘插入 USB 接口;
按住 reset 按钮之后重新接入电源,指示灯变为黄色闪烁状态即可松开 reset 键;
等待 3-5 秒后安装完成之后,小米路由器会自动重启,等待片刻之后就可以登录了)
# ssh root@192.168.31.1
-----------------------------------------------------
Welcome to XiaoQiang!
-----------------------------------------------------
$$$$$$\ $$$$$$$\ $$$$$$$$\ $$\ $$\ $$$$$$\ $$\ $$\
$$ __$$\ $$ __$$\ $$ _____| $$ | $$ | $$ __$$\ $$ | $$ |
$$ / $$ |$$ | $$ |$$ | $$ | $$ | $$ / $$ |$$ |$$ /
$$$$$$$$ |$$$$$$$ |$$$$$\ $$ | $$ | $$ | $$ |$$$$$ /
$$ __$$ |$$ __$$< $$ __| $$ | $$ | $$ | $$ |$$ $$<
$$ | $$ |$$ | $$ |$$ | $$ | $$ | $$ | $$ |$$ |\$$\
$$ | $$ |$$ | $$ |$$$$$$$$\ $$$$$$$$$ | $$$$$$ |$$ | \$$\
\__| \__|\__| \__|\________| \_________/ \______/ \__| \__|
root@XiaoQiang:~#
下载 frp 对应版本: https://github.com/fatedier/frp/releases/tag/v0.24.1
因为我硬盘上有数据,官方也有说明刷开发版本会清空硬盘数据。下载小米路由各个版本 ROM 地址如下:http://miwifi.com/miwifi_download.html
安装 Vsftpd
下载小米路由器 VSFTP 安装工具 绿色版: http://www.downza.cn/soft/269898.html
注:此工具要求路由器网关 IP 为 192.168.31.1。登录路由管理后台,进入”常用设置“->"局域网设置"->"设置局域网 IP 地址"为 192.168.31.1,否则会安装失败。
如上步骤操作完毕之后,局域网就可以访问了。
打通 ftp 公网访问
内网穿透
如果自己有购买云主机的话,借助 frp 的内网穿透能力,可以将路由器的端口映射到公网上去。操作看官方文档介绍: https://github.com/fatedier/frp
https://github.com/fatedier/frp
先在云主机上搭建 frps 服务端,然后在本地配置端口映射。当然云主机上安全组上将对应的端口都放开。
查看小米路由的 CPU:
root@XiaoQiang:~# cat /proc/cpuinfo
Processor : ARMv7 Processor rev 0 (v7l)
...
下载找到对应的 frp 版本到路由器上:https://github.com/fatedier/frp/releases/download/v0.24.1/frp_0.24.1_linux_arm.tar.gz
解压后修改配置文件:
root@XiaoQiang:~# vim /usr/local/frp_0.24.1_linux_arm/frpc.ini
[common]
server_addr = **.**.**.** # 此处填写云主机 IP,或者关联到主机的域名
server_port = 7000
### SMB 使用 137、138 udp 端口,139,445 tcp 端口,感兴趣的可以配置
[MI-Route-llmp-8095] # 自定义 llmp 端口为 8095(经测试,默认的 8080 无法使用,重启防火墙时发现 8080 被其他功能使用了,没有具体再追下去分析。防火墙开通端口例外,见后面防火墙部分说明)
type = tcp
local_ip = 127.0.0.1
local_port = 8095
remote_port = 22026
[MI-Route-ftp-21]
type = tcp
local_ip = 127.0.0.1
local_port = 21
remote_port = 10021
[range:Mi-Route-ftp-30000-30005] # 公网访问需要设置 vsftp 的 passive port 区间,映射之后,公网就可以访问了。
type = tcp
local_ip = 127.0.0.1
local_port = 30000-30005
remote_port = 30000-30005
启动 frp 客户端:
root@XiaoQiang:/usr/local/frp_0.24.1_linux_arm# ./frpc -c ./frpc.ini
# 编写后台启动脚本
# cat /usr/local/frp_0.24.1_linux_arm/start.sh
nohup /usr/local/frp_0.24.1_linux_arm/frpc -c /usr/local/frp_0.24.1_linux_arm/frpc.ini &
# 配置开机启动脚本
## 添加开机启动 putty 或 winscp 修改/etc/rc.local 文件,在 exit 0 之前添加一行
cat /etc/rc.local
# 加入启动命令
/usr/local/frp_0.24.1_linux_arm/start.sh
题外话:
借助小米路由的端口转发功能,也可以通过公网访问内网 PC 的一些服务。
以常见的情况为例,买个最低配置的 ECS linux 版本云主机,本地搭建 Tomat 服务,再买个域名。就可以低成本发布自己开发的一些 Demo 项目哈。
最近有面试一些同学,都说有做过一些项目,但是如果能把自己平时学习时的一些东西展示出来。效果会更好一些。
配置 ftp 被动模式,以便公网访问
如果要公网访问,则可以配置被动模式,关于被动模式的一些资料,可以见我之前的一篇文章《FTP 客户端对接开发旅记》:https://mp.weixin.qq.com/s/Gs5vBTZu0e3xGGXqEoATVg
修改 vsftp 配置文件,开启被动访问模式
# vim /etc/vsftpd.conf
# Add by bianxh:20200105
#guest_enable=YES
#guest_username=bianxh
pasv_enable=YES
pasv_min_port=30000
pasv_max_port=30005
小米路由搭建简易博客
安装 llmp
参考: http://www.miui.com/thread-1842334-1-1.html
安装 llmp 到小米路由的硬盘上:
chmod +x /userdisk/data/download/llmp_install.bin&&/userdisk/data/download/llmp_install.bin in
修改默认端口:
# vi /userdisk/llmp/etc/lighttpd/lighttpd.conf
## bind to port (default: 80)
#server.port = 8080
server.port=8095
重启 llmp 服务:
# sh /userdisk/llmp/manager/start_llmp.sh
添加防火墙例外:
# vim /etc/config/firewall
config rule
option name 'Allow-bianxh-Config'
option src 'wan'
option dest_port '139 445 8080 8095'
option proto 'tcp'
option family 'ipv4'
option target 'ACCEPT'
# /etc/init.d/firewall restart # 重启防火墙
如果需要修复:SSH 到路由器 22 端口,执行 sh /userdisk/llmp/manager/llmp_fix.sh
本地访问:
公网访问:
修改 mysql 密码
1.网站目录在小米路由器硬盘的根目录下的 wwwroot
文件夹
2.默认数据库用户名 root,密码 admin
3.系统运行于沙盒系统中,沙盒 SSH 端口为 3333,用户有 root、www、admin,密码默认都为 admin
4.修改数据库密码,newpasswd 为新密码,请自行替换 mysqladmin -u root -p password newpasswd
执行命令后要求输入旧密码(admin)即可。
登录小米路由器(默认密码 admin):
ssh -p 3333 root@127.0.0.1
## 修改 MySQL 数据库密码
~ # mysqladmin -u root -p password newpasswd
## 创建 blog 数据库,blog 是创建的数据库名称,请自行替换。要求输入密码,请输入修改之后的密码
mysqladmin -u root -p create blog
# 登录数据库
~ # mysql -h 127.0.0.1 -uroot -padmin
安装 typecho
下载后解压到 /userdisk/data/wwwroot,(最新的版本测试不通过),实测如下安装包可以用。
# typecho 下载 稳定版为 1.0 (14.10.10),并解压到 wwwroot 内
wget https://github.com/typecho/typecho/releases/download/v1.0-14.10.10-release/1.0.14.10.10.-release.tar.gz
解压后,访问效果图如下:
下一步配置一些参数:
数据库适配器: MySQL 原生函数适配器
数据库地址: localhost
数据库端口: 3306
数据库用户名: root
数据库密码: admin
数据库名: blog
数据库前缀: typecho_
创建您的管理员帐号
网站地址:http://192.168.31.1:8095
用户名:admin
登录密码:admin
配置成功截图:
只能访问主页,f12 可以看出是端口的原因。 https://segmentfault.com/q/1010000008401554
修改/userdisk/data/wwwroot/var/Typecho/Request.php 文件 218 行开始
public static function getUrlPrefix()
{
if (empty(self::$_urlPrefix)) {
self::$_urlPrefix = (self::isSecure() ? 'https' : 'http')
. '://' . (isset($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : $_SERVER['SERVER_NAME'])
// . (in_array($_SERVER['SERVER_PORT'], array(80, 443)) ? '' : ':' . $_SERVER['SERVER_PORT']);
;
}
return self::$_urlPrefix;
}
参考文档: https://sixu.life/xiaomi-router-r2d-llmp-typecho.html/comment-page-1
最后,觉得每次都使用端口号比较麻烦的话,可以用 ngnix 进行处理。这个本篇就不提了。简单说下我的配置参数:
# cat /etc/nginx/nginx.conf
...
server {
listen 80;
server_name mi.bianxh.top;
location / {
proxy_pass http://test.bianxh.top:22026/; # 22026 映射到 8095 端口
}
}
...
修改首页地址
# 登录沙盒
ssh -p 3333 root@127.0.0.1
# 登录数据库
~ # mysql -h 127.0.0.1 -uroot -padmin
mysql> use blog;
mysql> show tables;
mysql> select * from typecho_options;
## 查看表结构
mysql> desc typecho_options;
+-------+------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+------------------+------+-----+---------+-------+
| name | varchar(32) | NO | PRI | NULL | |
| user | int(10) unsigned | NO | PRI | 0 | |
| value | text | YES | | NULL | |
+-------+------------------+------+-----+---------+-------+
## 查看表数据,找到首页地址设置
mysql> select * from typecho_options where name = 'siteUrl';
+---------+------+--------------------------+
| name | user | value |
+---------+------+--------------------------+
| siteUrl | 0 | http://192.168.31.1:8095 |
+---------+------+--------------------------+
## 修改首页地址
mysql> update typecho_options set value = 'http://mi.bianxh.top' where name = 'siteUrl';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> select * from typecho_options where name = 'siteUrl';
+---------+------+----------------------+
| name | user | value |
+---------+------+----------------------+
| siteUrl | 0 | http://mi.bianxh.top |
+---------+------+----------------------+
其他收获
一些命令
如果报错无法编辑文档,则重新挂载
mount -o remount rw /
查看 3306 端口占用:
netstat -anp |grep 3306
查看进程占用什么端口:
netstat -nap | grep 进程 pid
OpenWrt 软件源
执行如下安装命令不生效,于是寻找软件包源:
opkg update
opkg install vsftpd
软件包安装源:
root@XiaoQiang:/usr/local# cat /etc/opkg.conf
src/gz attitude_adjustment http://downloads.openwrt.org/attitude_adjustment/12.09/brcm4709/R2D/packages
# 下面是寻找的 3 个其他源,经测试也失败。
src/gz chaos_calmer_base http://downloads.openwrt.org/chaos_calmer/15.05/bcm53xx/generic/packages/base
src/gz chaos_calmer_packages http://downloads.openwrt.org/chaos_calmer/15.05/bcm53xx/generic/packages/packages
src/gz attitude_adjustment http://downloads.openwrt.org/attitude_adjustment/12.09/brcm47xx/generic/packages
防火墙设置
修改规则配置,放开部分端口
# vim /etc/config/firewall
添加内容:
config rule
option name 'Allow-bianxh-Config'
option src 'wan'
option dest_port '139 445 8080 8095' ## 自定义一些例外端口
option proto 'tcp'
option family 'ipv4'
option target 'ACCEPT'
让规则生效:
# /etc/init.d/firewall restart
疑问
SMB 共享失败
小米路由 smb 配置文件如下,但是经测试,这个文件每次修改后,重启路由后会恢复。smb 使用 139 和 445 端口,但是这个端口通过 frp 映射出去后,始终无法访问。
root@XiaoQiang:~# cat /etc/samba/smb.conf
异地访问测试总是会被拒绝,防火墙已经配置过了:
$ smbclient -p 22022 //test.bianxh.top/XiaoMi
Unable to initialize messaging context
protocol negotiation failed: NT_STATUS_CONNECTION_DISCONNECTED
工具包下载
本文涉及的所有工具包下载:
链接: https://pan.baidu.com/s/115ZQwKEvJvgCZHsTytR0BA
提取码:adtw
安装 Shadowsocks
https://github.com/monlor/MIXBOX
mixbox install shadowsocks
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
上一篇: CentOS 7 网卡配置
下一篇: 谈谈自己对于 AOP 的了解
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论