Openwrt 路由设置(五):外网连接服务
一、外网连接
(一)ddns
用ddns取动态IP,要基于运营商提供公网IP(IPv4)。如没有公网IP(本文不覆盖),可以使用公网IPv6,或者使用VPN打通道。
安装 $ opkg install ddns-scripts ddns-scripts-services luci-app-ddns luci-i18n-ddns-zh-cn
插件。
1. 免费duckdns.org服务
- duckdns.org 注册(可通过github登录);取得
token
作为密码 - 编辑
/etc/config/ddns
配置如下:
config service 'duckdns'
option enabled '1'
option use_ipv6 '0'
option use_syslog '3'
option update_url 'https://www.duckdns.org/update?domains=[USERNAME]&token=[PASSWORD]&ip=[IP]'
option lookup_host 'example.com'
option domain 'abc.duckdns.org'
option username 'abc'
option password 'aaaabbbbccccdddd'
option check_interval '11'
option check_unit 'minutes'
option force_interval '3'
option force_unit 'days'
option retry_interval '2'
option retry_unit 'minutes'
option retry_count '0'
option ip_source 'interface'
option ip_interface 'pppoe-wan'
option interface 'pppoe-wan'
option use_https '1'
option cacert '/etc/ssl/abc.com.crt'
lookup_host
为本机的公网域名- 仅IPv4,不开启IPv6
- “retry_count”设为 0,即失败后无限次尝试
- IP来源用
interface
的pppoe-wan
- 启用HTTPS,证书用CA签发的本机的公网域名的证书
另:duckdns提供证书,不建议使用。$ curl -k https://certs.secureserver.net/repository/sf_bundle-g2.crt > /etc/ssl/certs/ca-bundle.pem
2. 域名供应商(namecheap.com)服务
- ddns有现成 namecheap.com 的配置模板,在“DDNS服务供应商”中选择。
/etc/config/ddns
具体配置如下:
config service 'namecheap_ddns'
option service_name 'namecheap.com'
option lookup_host 'example.com'
option domain 'example.com'
option username '@'
option password 'aaaabbbbccccdddd'
# 其余略,同上
- namecheap.com 后台配置:
- 开启Dynamic DNS;添加“A + Dynamic DNS Record”,@,127.0.0.1。后续会自动更新。
- Host Records中,添加“A + Dynamic DNS Record”,@,127.0.0.1。后续会自动更新。
- 可设置多个“URL Redirect Record”,“Host”为abc.example.com中的
abc
,“Unmarsked”转发至各项服务链接。
(二)ddnsto(非公网IP可用)
ddnsto可以实现网页访问ssh、rdp远程桌面、url转发等。如没有安全性顾虑,很方便。《官方网站指南》
openwrt做服务器:
- 下载安装
ddnsto.ipk
(注意架构)和luci-app-ddnsto.ipk
、luci-i18n-ddnsto-zh-cn.ipk
- 后台登记Token
- 安装证书,切换HTTPS
其他设备做服务器仅有docker镜像;设置时PUID和PGID一般均为 1000
(Linux用 $ id $usr
命令查询)。
二、外网连接放行:端口转发
Openwrt 内置防火墙,远程访问的基础是开放对外端口,并打通对外端口和内部端口的转发通道。
注意: 首先检查网络运营商是否屏蔽端口,国内运营商一般均屏蔽如80、8080等小号端口。
- 开放对外端口
- 网络–防火墙–通讯规则:放开外部“源”端口和内部“目标”端口的转发通道。
- 端口转发
- 网络–防火墙–端口转发:指定协议,并设置由外部“源”端口到内部“目标”IP:端口的转发。
三、对外服务的总体框架
Openwrt 开放对外服务,允许远程访问是件危险的事情,存在安全隐患。
最基本的安全要求:
- 必须HTTPS,且不使用来历不明的SSL证书;
- 避免开放常规端口,通过端口转发,用大号端口转向内部端口。
- 强密码;必要时MAC验证、证书验证。
对外注意加密!!!必须通过HTTPS(包括SSH和RDP)!!!。
(一)HTTPS
提供的对外服务包括:
- Openwrt 管理后台;根据需要开放 Syncthing 管理后台、Openclash 管理后台等
- FileBrowser 在线文件管理
- WebDAV 文件传输服务(单独端口)
- NextTerminal 在线SSH和在线远程桌面RDP(单独端口)
(二)SSH
使用ttyd实现内外网通过浏览器ssh连接路由。
-
安装插件
opkg install ttyd
-
开机启动脚本。新建
/etc/init.d/ttyd_2
#!/bin/sh /etc/rc.common
START=99
STOP=5
SERVICE_USE_PID=1
SERVICE_WRITE_PID=1
SERVICE_DAEMONIZE=1
start() {
service_start /usr/bin/ttyd -m 6 -p 7681 -t disableReconnect=true -t 'theme={"background": "darkgreen"}' -S -C /root/ssl/aaa.cer -K /root/ssl/aaa.key login
# 最多同时6个连接;端口7681;不允许重连;设置深绿色背景;启用HTTPS;指定证书和KEY;登陆运行login
}
stop() {
service_stop /usr/bin/ttyd
}
注意手动赋权 chmod +x
;启动 $ service ttyd_2 enable
-
设置防火墙通信规则和端口转发:TCP到路由7681端口。
-
外网可通过HTTPS安全访问,内网也可访问(HTTP)。
-
关闭openwrt内部设置“SSH访问网关端口”,不允许外网连接到路由转发的端口。
(三)RDP
提供的对外服务:局域网内Windows设备的对外远程桌面。
另:还可通过 NextTerminal ,在线访问远程桌面。
设置端口转发,开放外部大端口,转发至windows主机的ip:3389(RDP默认端口),允许TCP协议。
RDP前提是开机(废话)。可通过Openwrt后台或NextTerminal远程唤醒(WakeOnLan)。
# 安装 WakeOnLan 控件:
$ opkg install etherwake luci-app-services-wolplus luci-i18n-services-wolplus-zh-cn
# 唤醒:
$ /usr/bin/etherwake -i br-lan 99:00:AA:BB:00:00 # 需要电脑mac地址和其所在局域网的接口br-lan
(四)Next Terminal 堡垒机
提供网页版访问SSH、RDP远程桌面等功能(基于guacd服务)。
官方网站: next-terminal.typesafe.cn/
Openwrt通过docker安装和使用:
- docker准备:
# Openwrt安装时区,供docker读取。
$ opkg update
$ opkg install zoneinfo-asia
$ ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
- 安装:
$ docker pull dushixiang/guacd
$ docker pull dushixiang/next-terminal
- 运行:
# 运行guacd
$ docker run --restart=always --name guacd -d \
-v /root/next-terminal/data:/usr/local/next-terminal/data \
dushixiang/guacd:latest
# 安装 next-terminal
$ docker run --restart=always --name next-terminal -d \
--link guacd \
-p 8088:8088 \
-v /root/next-terminal/data:/usr/local/next-terminal/data \
-v /etc/localtime:/etc/localtime \
-e DB=sqlite \
-e GUACD_HOSTNAME=guacd \
-e GUACD_PORT=4822 \
dushixiang/next-terminal:latest \
- docker网络选择host模式,不选桥接。通过
localhost:8088
登录访问。
- 外网访问: Next Terminal不支持HTTPS,只能通过反向代理走HTTPS;且不能用带路径的URI访问,须新开端口用host访问:
# nginx:新开个端口新建service{}。在 service {} 中:
location / { # 不能带路径
proxy_pass http://127.0.0.1:8088/;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $http_connection;
}
- 设置:
- 设置管理员账户和密码!
- 关闭录屏
- 日记保留取消永久
- 计划任务,关闭并删除定期查岗。
- 设置远程唤醒 WakeOnLan: 新建计划任务:
- Shell脚本:
$ /usr/bin/etherwake -i br-lan 99:00:AA:BB:00:00
- Cron表达式:字符串以5个空格隔开6个域,对应
秒 分 小时 日期 月份 星期
。例如50 50 15 9 1 ?
代表每年1月9日(不知道星期几)15:50:50执行任务。
四、Openwrt 其他功能
(一)JD自动签到领豆
(目前可领取的豆很少)
- 安装依赖:
$ opkg install node wget lua
- 安装:
luci-app-jd-dailybonus
下载地址 github.com/jerrykuku/luci-app-jd-dailybonus - 通过后台更新脚本:脚本下载地址 github.com/NobyDa/Script
- 获取JD的cookie(cookie有效期一般最长1个月,到期需要重新领取):
电脑chrome浏览器,浏览
m.jd.com
,账号登入;登入后,按键F12调出开发工具;点击“我的”,开发工具 Network – Header 里查找cookie
。(不要关闭,步骤6还需用) - 复制 cookie 内容中
pt_key=...;pt_pin=...;
填写在后台的指定位置。 - 打开手机JD金融app;成功签到1次。返回电脑chrome,开发工具 Name 过滤 “ms.jr.jd.com”,点击白条、金条等项目,Name中复制
reqData=...
。填写在后台的指定位置。 - 直接关闭电脑浏览页,千万不要logout,也不要再用相同浏览器登录其他jd账号,否则提取的cookie即刻失效。
(二)网易云音乐劫持
- 安装:
luci-app-unblockneteasemusic
下载地址 github.com/UnblockNeteaseMusic/luci-app-unblockneteasemusic - 首次使用会在后台下载核心程序,启动时间略长。
- 必须启用HTTPS,否则Apple的设备和Linux设备无法享受服务。
- 建议自签发证书:自做CA根证书,签发server证书;用server证书替换掉软件包预设证书;各client设备手工信任自签发的CA根证书。
最后修改于 2024-02-24