[OpenWrt]OpenWrt相关配置

一. 硬件及软件

路由器:小米路由器 R3G

OS:OpenWrt 21.02.2

芯片:MT7621

SSH客户端:MobaXterm Personal 12.4

浏览器:Microsoft Edge

OpenWrt主题:Luci-theme-argon 2.2.9.4 (主题包:Releases · jerrykuku/luci-theme-argon (github.com)、配置图形界面:Releases · jerrykuku/luci-app-argon-config (github.com))

 

二. 网络配置

1. 接口静态地址配置

  • WAN口:静态地址协议必须手动设置DNS,DHCP服务器中的IPv6设置,禁用RA服务和DHCPv6服务(如果想用的话,自己百度吧,但是开了会有问题)。

  • LAN口:可以不自定义DNS服务器,但是需要在DHCP服务器的高级设置中设置DHCP选项,所填内容为“6,自定义DNS服务器1,自定义DNS服务器2,自定义DNS服务器3”(前面的6是表示DNS服务器,其他数字具体参考啥地方来着,我忘了),配置之后连接路由器的客户端就可以自动获取自定义的DNS服务器了。然后DHCP服务器中的IPv6设置中也要把禁用RA服务和DHCPv6服务(一样是开了之后有问题);

2. 防火墙的端口转发(端口映射)

3. 安装Shadow&Socks(SS)服务

(把下面的 & 去掉,因为博客不允许包含敏感词)

  • 安装 luci-app-shadow&socks-libev 插件:ss的图形界面;
  • 安装 shadow&socks-libev-ss-server 插件:ss的服务端程序;
  • 刷新界面之后在服务中打开 Shadow&socks-libev 界面
  • 添加ss-server实例:加密方式建议使用 rc4-md5 (官方建议用于 OpenWRT 路由器,我也试了,确实基本上是最快的,但是其他架构的芯片我就不知道了);

4. 开放端口

进入网络中的防火墙进行设置,默认端口是关闭的,需即使你安装了什么服务,外部也访问不到内部的端口号,是由于下面这条给拦截了。

 要想开放端口,则把上边的入站数据和转发设为接受就好了,但是这样会暴露所有端口,可以使用下面的通信规则开放相应端口:

5. 安装 Samba

最新版的opkg镜像里面只有samba4的插件,需要的依赖太多,而且我装不上依赖 samba4-libs ,安装失败。但是可以安装 samba3.6,需要安装两个插件,分别是 samba36-server 和 luci-app-sambasamba36-server 可以去opkg镜像的 /19.07.9/packages/mipsel_24kc/base/ 目录下载,luci-app-samba 可以去 /19.07.9/packages/mipsel_24kc/luci/ 目录下载(当然,如果你需要汉化的话还需要下载汉化包 luci-i18n-samba-zh-cn ,同样在 /19.07.9/packages/mipsel_24kc/luci/ 目录下载);

需要注意的是,samba使用的端口号为139和445,使用之前应先开启这两个端口。如果是宽带,这两个端口都已经被运营商屏蔽,无法通过外网访问。

  • 安装 samba36-serverluci-app-samba  luci-i18n-samba-zh-cn
  • 刷新管理界面之后,找到网络共享,按下图配置(注意,非root用户无法不具备系统路径的读写权限,所以即使使用非root用户登录,也写入文件);

  •  启动服务并设置开机自启;
/etc/init.d/samba start
/etc/init.d/samba enable
  • 设置root用户密码(samba的共享用户密码是单独配置的,执行下面的命令将root添加为共享用户,同时按照命令提示设置共享密码,该密码不能登录OpenWrt系统)
smbpasswd -a root

 【注】有时候能访问,却不能打开文件或者下载文件,可以检查一下是否支持挂载的U盘或者硬盘的文件系统,查看是否安装了对应的软件包(例如FAT32文件系统需要安装 “kmod-fs-vfat” 这个软件)。

6. 校园网自动登录

(其他学校的我不清楚,本例是广西师大)

参考链接1: openwrt校园网自动登录且断网重连_in dreaming的博客-CSDN博客_openwrt断网自动重启

参考链接2:openwrt下crontab定时任务实现_Kenen.Gao的博客-CSDN博客_crontab openwrt

参考链接3:[OpenWrt Wiki] Scheduling tasks with cron

  • 创建目录 /etc/campusnetwork-autologin/
  • 在该目录下创建登录动作执行文件 login.sh (需自行更改相关参数),填入下面内容,并赋予执行权限(执行 “chmod +x /etc/campusnetwork-autologin/login.sh”);
# 主机:雁山为“ys.gxnu.edu.cn”、育才为“yc.gxnu.edu.cn”、王城为“wc.gxnu.edu.cn”(王城这个我是猜的)
# 参数:(除以下列举的参数,其他的不需要更改)
# R3:运营商,0,1,2,3分别对应校园网、电信、联通与移动;
# DDDDD:学号;
# upass:密码;
curl 'http://主机/drcom/login?callback=dr1003&DDDDD=学号&upass=密码&0MKKey=123456&R1=0&R2=&R3=运营商&R6=0&para=00&v6ip=&terminal_type=1&lang=zh-cn&jsVersion=4.1&v=1891&lang=zh'
# 建议主机直接填ip,因为外网的dns服务器是解析不到上面三个域名的,如果之前自己手动更换了DNS服务器,则无法解析到IP,该请求就失效
login.sh
  • 在该目录下创建自动登录逻辑脚本 autologin.sh ,填入下面内容,并赋予执行权限;
# ping 的总次数
PING_SUM=3
# ping 的间隔时间,单位秒
SLEEP_SEC=10
# 连续重启网卡 REBOOT_CNT 次网络都没有恢复正常,重启软路由
# 时间= (SLEEP_SEC * PING_SUM + 20) * REBOOT_CNT
REBOOT_CNT=3
LOG_PATH="/root/ping/log.txt"
cnt=0
reboot_cnt=0
while :
do
    ping -c 1 -W 1 114.114.114.114 > /dev/null
    ret=$?
    ping -c 1 -W 1 223.6.6.6 > /dev/null
    ret2=$?
    if [[ $ret -eq 0 || $ret2 -eq 0 ]]
    then
        exit
        echo -e 'try to exit\n' >> $LOG_PATH
        # cnt=0
        # reboot_cnt=0
    else
        cnt=`expr $cnt + 1`
        # echo -n `date '+%Y-%m-%d %H:%M:%S'` >> $LOG_PATH
        echo -n `date '+%Y-%m-%d %H:%M:%S'`
        # printf '-> [%d/%d] Network maybe disconnected,checking again after %d seconds!\r\n' $cnt $PING_SUM $SLEEP_SEC >> $LOG_PATH
        printf '-> [%d/%d] Network maybe disconnected,checking again after %d seconds!\r\n' $cnt $PING_SUM $SLEEP_SEC
        
        if [ $cnt == $PING_SUM ]
        then
            # echo 'try to re curl!' >> $LOG_PATH
            echo 'try to re curl!'
            sleep 5
            /etc/campusnetwork-autologin/login.sh
            
            cnt=0
            # 重连后,等待10秒再进行ping检测
            sleep 8
            # 网卡重启超过指定次数还没恢复正常,重启软路由
            # reboot_cnt=`expr $reboot_cnt + 1`
            # if [ $reboot_cnt == $REBOOT_CNT ]
            # then
            #     echo -n `date '+%Y-%m-%d %H:%M:%S reboot!'` >> $LOG_PATH
            #     echo '-> Network has some problem, lets reboot' >> $LOG_PATH
            #     echo '-> =============== reboot!'
            #     reboot
            # fi
        fi
    fi    
    sleep $SLEEP_SEC
done
autologin.sh
  • 编辑 /etc/crontabs/root 文件,添加定时任务(或者使用命令 “crontab -e” 添加也行),注意最后有个空行
*/1 * * * * /etc/campusnetwork-autologin/autologin.sh

  • 重启crontab服务(执行“/etc/init.d/cron restart”或者“/etc/init.d/cron reload”)使配置文件生效;

 (如果发现不生效,可用 “logread -e cron” 命令查看日志排除故障)

 7. 安装PPTP服务

参考链接:OpenWRT搭建PPTP服务器

  • 安装pptpd;
$ opkg update
$ opkg install pptpd kmod-mppe ppp
  • 修改配置文件 /etc/config/pptpd
config service 'pptpd'
        option localip '192.168.0.1'
        option enabled '1'
        option remoteip '192.168.0.51-250'
        option logwtmp '0'
        option nat '1'
        option internet '1'

# 添加两个用户“chasemeng”和“guest”
config login
        option username 'chasemeng'
        option password '140533'
config login
        option username 'guest'
        option password 'guest'
/etc/config/pptpd
  • 启动pptpd,并查看是否启动成功(1723端口);
$ /etc/init.d/pptpd enable    # 开启启动,这个是最直接的方法,和service pptpd enable,效果是一样的
$ /etc/init.d/pptpd start    # 启动
$ netstat -antp    # 查看端口1723
  • 配置iptables规则,在文件 /etc/firewall.user 中添加以下内容,或者也可以在防火墙的自定义规则界面添加;
iptables -A forwarding_rule -i ppp+ -j ACCEPT 
iptables -A forwarding_rule -o ppp+ -j ACCEPT 
iptables -A output_rule -o ppp+ -j ACCEPT 
iptables -A input_wan_rule -p tcp --dport 1723 -j ACCEPT 
iptables -A input_wan_rule -p tcp --dport 47 -j ACCEPT 
iptables -A input_wan_rule -p gre -j ACCEPT 
iptables -A input_rule -i ppp+ -j ACCEPT     #上面简单来说就是配置允许ppp+和wan口的1723,47端口只能走tcp协议

 8. 端口转发

端口转发操作很简单,普通的转发这里不赘述,这里介绍一下代理远程端口的方法。

场景:本地的某些软件要访问远程主机,是无法指定端口的,例如Windows文件资源管理器想要映射远程samba服务器到本地驱动器,就无法指定端口,只能使用默认的445。但是如果远程主机的samba服务端口更改为非445端口,那么就会导致本地Windows无法访问。还有一种情况是,VS Code要远程访问服务器进行开发的话,同样是无法指定非22端口进行操作的。

解决思路:在本地的openwrt路由器中设置端口转发,将访问目标主机的默认端口转发到指定端口。例如远程的主机(ip为172.18.118.175)的ssh服务端口改为了40029,本地VS Code只能使用22端口进行连接,然而在openwrt路由器中会对这个目标的地址的22端口转发到40029端口,设置过程如下:

 设置好的效果:

 【注】虽然上图显示中包含“到此设备”的标注,但是实际上不会影响openwrt路由器的ssh登录。

三. 安装插件

1. 替换软件源

参考:openwrt镜像-阿里巴巴开源镜像站 

2. 安装方法

第三方插件下载网站(很多插件opkg镜像中都没有):Openwrt Download Server (supes.top),MT7621选择 mipsel_24kc 目录搜索;

  • 上传安装包:自动会安装依赖,如果opkg镜像中没有相关依赖的话就会报错,但是可以手动安装;
  • URL安装:没成功过~;
  • 在插件列表中在线安装

3. 安装 luci-app-* 插件后打不开后台界面或者插件相应页面的问题

确保 luci luci-base luci-compat 这三个插件已经正确安装,特别是 luci-compat 这个插件,我装的 OpenWrt固件 就没装这个,这个好像是解决兼容性问题的。如果不行的话也没办法了,使用ssh连接路由器,把刚才安装之后出现错误的插件给卸载了就好了。

4. 安装之后无法启动

如果提示什么文件或者什么库未发现的话,或许是插件版本太高,可以尝试更换低版本插件!

 

四. 安装其他服务

1. 挂载ext4硬盘

参考:[开放维基]添加 USB 驱动器的快速入门 (openwrt.org)

(最后一步的“/etc/init.d/fstab boot”即使执行出错似乎也没什么问题。但是需要注意的是,整个过程中U盘会被格式化!)

 2. 挂载NTFS硬盘

参考:[开放维基]可写 NTFS (openwrt.org)

(貌似不会使用清除数据,但是我没试过)

 

posted @ 2022-09-05 11:27  小贼的自由  阅读(6559)  评论(0编辑  收藏  举报