Openwrt 路由设置(五):外网连接服务
Openwrt 外网连接服务的具体设置

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来源用 interfacepppoe-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 后台配置:
    1. 开启Dynamic DNS;添加“A + Dynamic DNS Record”,@,127.0.0.1。后续会自动更新。
    2. Host Records中,添加“A + Dynamic DNS Record”,@,127.0.0.1。后续会自动更新。
    3. 可设置多个“URL Redirect Record”,“Host”为abc.example.com中的abc,“Unmarsked”转发至各项服务链接。

(二)ddnsto(非公网IP可用)

ddnsto可以实现网页访问ssh、rdp远程桌面、url转发等。如没有安全性顾虑,很方便。《官方网站指南》

openwrt做服务器:

  1. 下载安装 ddnsto.ipk(注意架构)和 luci-app-ddnsto.ipkluci-i18n-ddnsto-zh-cn.ipk
  2. 后台登记Token
  3. 安装证书,切换HTTPS

其他设备做服务器仅有docker镜像;设置时PUID和PGID一般均为 1000(Linux用 $ id $usr 命令查询)。

二、外网连接放行:端口转发

Openwrt 内置防火墙,远程访问的基础是开放对外端口,并打通对外端口和内部端口的转发通道。

注意: 首先检查网络运营商是否屏蔽端口,国内运营商一般均屏蔽如80、8080等小号端口。

  1. 开放对外端口
  • 网络–防火墙–通讯规则:放开外部“源”端口和内部“目标”端口的转发通道。
  1. 端口转发
  • 网络–防火墙–端口转发:指定协议,并设置由外部“源”端口到内部“目标”IP:端口的转发。

三、对外服务的总体框架

Openwrt 开放对外服务,允许远程访问是件危险的事情,存在安全隐患。

最基本的安全要求:

  1. 必须HTTPS,且不使用来历不明的SSL证书;
  2. 避免开放常规端口,通过端口转发,用大号端口转向内部端口。
  3. 强密码;必要时MAC验证、证书验证。

对外注意加密!!!必须通过HTTPS(包括SSH和RDP)!!!。

(一)HTTPS

提供的对外服务包括:

  1. Openwrt 管理后台;根据需要开放 Syncthing 管理后台、Openclash 管理后台等
  2. FileBrowser 在线文件管理
  3. WebDAV 文件传输服务(单独端口)
  4. NextTerminal 在线SSH和在线远程桌面RDP(单独端口)

(二)SSH

使用ttyd实现内外网通过浏览器ssh连接路由。

  1. 安装插件 opkg install ttyd

  2. 开机启动脚本。新建 /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

  1. 设置防火墙通信规则和端口转发:TCP到路由7681端口。

  2. 外网可通过HTTPS安全访问,内网也可访问(HTTP)。

  3. 关闭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安装和使用:

  1. docker准备:
# Openwrt安装时区,供docker读取。
$ opkg update
$ opkg install zoneinfo-asia
$ ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
  1. 安装:
$ docker pull dushixiang/guacd
$ docker pull dushixiang/next-terminal
  1. 运行:
# 运行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 登录访问。
  1. 外网访问: 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;
}
  1. 设置:
  • 设置管理员账户和密码!
  • 关闭录屏
  • 日记保留取消永久
  • 计划任务,关闭并删除定期查岗。
  1. 设置远程唤醒 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自动签到领豆

(目前可领取的豆很少)

  1. 安装依赖:$ opkg install node wget lua
  2. 安装:luci-app-jd-dailybonus 下载地址 github.com/jerrykuku/luci-app-jd-dailybonus
  3. 通过后台更新脚本:脚本下载地址 github.com/NobyDa/Script
  4. 获取JD的cookie(cookie有效期一般最长1个月,到期需要重新领取): 电脑chrome浏览器,浏览 m.jd.com ,账号登入;登入后,按键F12调出开发工具;点击“我的”,开发工具 Network – Header 里查找 cookie 。(不要关闭,步骤6还需用)
  5. 复制 cookie 内容中 pt_key=...;pt_pin=...; 填写在后台的指定位置。
  6. 打开手机JD金融app;成功签到1次。返回电脑chrome,开发工具 Name 过滤 “ms.jr.jd.com”,点击白条、金条等项目,Name中复制 reqData=...。填写在后台的指定位置。
  7. 直接关闭电脑浏览页,千万不要logout,也不要再用相同浏览器登录其他jd账号,否则提取的cookie即刻失效。

(二)网易云音乐劫持

  1. 安装:luci-app-unblockneteasemusic 下载地址 github.com/UnblockNeteaseMusic/luci-app-unblockneteasemusic
  2. 首次使用会在后台下载核心程序,启动时间略长。
  3. 必须启用HTTPS,否则Apple的设备和Linux设备无法享受服务。
    • 建议自签发证书:自做CA根证书,签发server证书;用server证书替换掉软件包预设证书;各client设备手工信任自签发的CA根证书。

最后修改于 2024-02-24