群晖网站系统完善

群晖的基本功能现在总算是稳定了,下一步就是开始完善群晖的网站系统了,其实这个在其它机器上已经搞过很多次了,只是一直没有系统的记录,这次就借着这个机会统一整理一下。

配置域名

搞网站,首先要有的就是域名了,我之前有一阵挺热衷域名的,一连申请了好几个,最近都在吃灰,这下又可以派上用场了,因为家里不是固定IP(固定IP也搞不起),好在有公网IP,所以可以用DDNS解决域名频繁变动的问题,这个我直接用了Github上的一个脚本,链接地址, 配置也很简单,不过有个问题需要注意这个脚本只支持bash,而我平常用的是zsh,直接运行会出错,修改为bash运行之后一切正常。

另外在进行记录更新的时候,脚本会用到一个dig的工具,这个默认在Docker里面是没有安装的,需要通过如下的命令安装:

sudo apt install dnsutils

这样脚本可以通过请求一个网站获取IP,同时根据dig工具获取当前域名配置是不是和获取的IP一致,只有二者不一致的时候脚本才会更新DDNS记录,这样就避免了频繁请求DNS记录。相关的脚本在这里下载。理论上这个脚本是可以在群晖的系统里面运行的,但是尝试之后发现群晖里面也没这个dig工具,因此只能在docker ubuntu里面运行了

复用443端口

可怜的我在公司里面只有443端口可以用,之前试过haproxy进行端口复用,但是这个在dokcer里面一直有问题,没办法,还是换回了sslh这个小工具,我在我的VPS里面也是用的这个小工具,配置简单,用起来其实还不错。首先通过如下的命令安装:

sudo apt install sslh

这个工具的配置文件路径是/etc/default/sslh,可以将默认配置文件备份之后进行如下的修改:

RUN=yes

# binary to use: forked (sslh) or single-thread (sslh-select) version
# systemd users: don't forget to modify /lib/systemd/system/sslh.service
DAEMON=/usr/sbin/sslh

# DAEMON_OPTS="--user sslh --listen <change-me>:443 --ssh 127.0.0.1:22 --ssl 127.0.0.1:443 --pidfile /var/run/sslh/sslh.pid"
DAEMON_OPTS="--user sslh --listen 0.0.0.0:443 --ssh 127.0.0.1:22 --ssl 127.0.0.1:9443 --anyprot 127.0.0.1:9001 --pidfile /var/run/sslh/sslh.pid"

这里将监听端口设置为443,ssh为转到本地22,https转到本地9443,其他请求转到本地9001,完了直接重启服务:

sudo service sslh restart

没有问题的话,就可以通过443端口连接SSH服务了。

开启HTTPS

现在都9102年了,没有个HTTPS都不好意思混了,每次连接NAS的时候都要带个小尾巴也挺不舒服的,所以就借着这个机会也给咱的NAS配上了证书,证书是直接在阿里云上申请的免费证书,时间是一年,直接内部DNS验证,比较方便,下载下来搞到NGINX上面就能用了。基本的nginx配置信息如下:

server {
    server_name               nas.example.com;
    access_log                /var/log/nginx/nas_debug.access.log;
    error_log                 /var/log/nginx/nas_debug.error.log;

    location / {
        proxy_pass            https://192.168.1.xxx:5001;
        proxy_set_header      Host $host;
        proxy_http_version    1.1;
        proxy_set_header      Upgrade "websocket";
        proxy_set_header      Connection "Upgrade";
        proxy_read_timeout    86400;
    }

    listen 127.0.0.1:9443 ssl; # managed by Certbot
    ssl_certificate /path/to/pem;
    ssl_certificate_key /path/to/key;
    ssl_session_timeout 5m;
    ssl_ciphers xxxxxxxxxxxxxxxxx;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;
}

这里说明一下,server_name就是我们开启服务用到的域名,proxy_pass是进行代理,这里直接转到本地群晖的服务上面,这里网页服务是用的HTTPS,这样我们就可以直接通过HTTPS访问我们的服务了,当然你的路由器还是要做必要的端口映射。需要说明的是,因为80口默认是禁用的,所以在浏览器输入网址的时候需要手动写https://xxx.xxx.xxx

另外上面几个proxy_set_header也是必须的,否则DSM网页中是无法开启网页终端的,因为网页终端是基于sockets的,这几条就是保证sockets可以正常使用。证书的配置可以直接参考阿里云的文档,直接复制修改相应pemkey的路径就可以了。

以上,玩机愉快!


本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可。

发表新评论