用一台闲置小鸡,搭个私有版 ngrok(sish 内网穿透实战) - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
通过以下 Referral 链接购买 DigitalOcean 主机,你将可以帮助 V2EX 持续发展
DigitalOcean - SSD Cloud Servers
lulas
V2EX    VPS

用一台闲置小鸡,搭个私有版 ngrok(sish 内网穿透实战)

  •  
  •   lulas 1天前 237 次点击

    手里正好有一台 VMRack 的闲置 小鸡,性能一般但胜在公网 IP 稳定。与其吃灰,不如拿来干点实事,于是折腾了一套 基于 sish 的私有内网穿透服务,效果比预期好不少。

    简单说一句结论: 够轻、够稳、够省事,个人或小团队完全够用。

    sish 是一个开源的反向隧道项目,功能上和 ngrok 类似,但部署在自己服务器上,完全可控。

    为什么选 sish ? 用下来有几个点比较打动我:

    客户端零安装:只要有 SSH ,任何系统都能用 服务端自动申请 HTTPS 证书:直接走 Let’s Encrypt 支持泛域名:每个服务一个子域名,很清爽 资源占用极低:小鸡也能跑 安全可控:公钥白名单,谁能用你说了算 一句话总结:

    非商业场景下,这是我目前最顺手的内网穿透方案。

    :zero: 前置条件 在开始前,你需要准备:

    一台 有公网 IP 的 Linux VPS (本文使用的是 VMRack 云服务,其他商家同理) 一个域名(强烈建议托管在 Cloudflare ) 本地机器已配置 SSH key :one: Cloudflare 侧的 DNS 设置 在 Cloudflare 面板新增一条解析:

    Name:*(泛解析) Content:你的 VPS 公网 IP Proxy status:DNS only (灰云) :warning: 这里一定不要开小黄云,否则证书和回源都会出问题。

    如果你习惯分开用,也可以单独加一条:

    ssh.your-domain.xyz → VPS_IP :two: 调整 VPS 默认 SSH 端口(很关键) 为了让 sish 直接监听 22 端口,必须先把系统自带的 SSH 挪走,否则会冲突。

    编辑配置文件:

    vim /etc/ssh/sshd_config 修改为类似这样:

    Port 10000 #Port 22 重启 SSH 服务:

    systemctl restart sshd :warning: 注意事项:

    之后登录 VPS 记得带 -p 10000 防火墙提前放行:10000 / 80 / 443 :three: 安装 sish 并准备运行环境 这一步主要是做三件事: 建用户 → 下程序 → 准备密钥

    直接按顺序执行即可。

    创建系统用户

    useradd --system --home /opt/sish --shell /usr/sbin/nologin sish || true mkdir -p /opt/sish/{ssl,keys,pubkeys,templates} chown -R sish:sish /opt/sish 下载并安装 sish (二进制版,amd64 ):

    cd /tmp wget https://github.com/antoniomika/sish/releases/download/v2.20.0/sish-2.20.0.linux-amd64.tar.gz tar -xvf sish-2.20.0.linux-amd64.tar.gz install -m 0755 sish-2.20.0.linux-amd64/sish /usr/local/bin/sish 拉取默认模板:

    git clone --depth 1 https://github.com/antoniomika/sish.git /tmp/sish-src cp -r /tmp/sish-src/templates /opt/sish/ chown -R sish:sish /opt/sish/templates 生成服务端 SSH Host Key:

    sudo -u sish ssh-keygen -t ed25519 -N "" -f /opt/sish/keys/ssh_host_ed25519_key rm /opt/sish/keys/ssh_host_ed25519_key.pub :four: 启用公钥鉴权(防止被白嫖) sish 默认支持 SSH 公钥白名单,这一点非常加分。

    在你本地电脑上查看自己的公钥:

    cat ~/.ssh/id_ed25519.pub 然后在 VPS 上写入:

    echo "你的公钥内容" > /opt/sish/pubkeys/me.pub chown sish:sish /opt/sish/pubkeys/me.pub 之后,只有这个 key 才能建立隧道连接。

    :five: 配置 systemd 服务(核心) 创建服务文件:

    vim /etc/systemd/system/sish.service 注意替换你自己的域名和邮箱:

    [Unit] Description=sish tunnel server After=network-online.target

    [Service] User=sish Group=sish WorkingDirectory=/opt/sish

    AmbientCapabilities=CAP_NET_BIND_SERVICE CapabilityBoundingSet=CAP_NET_BIND_SERVICE NOnewPrivileges=true

    ExecStart=/usr/local/bin/sish
    --ssh-address=:22
    --http-address=:80
    --https-address=:443
    --domain=your-domain.xyz
    --authentication=true
    --authentication-keys-directory=/opt/sish/pubkeys
    --private-keys-directory=/opt/sish/keys
    --https
    --https-certificate-directory=/opt/sish/ssl
    --https-ondemand-certificate
    --https-ondemand-certificate-accept-terms
    --https-ondemand-certificate-email=your-email
    --bind-random-subdomains=false
    --force-requested-subdomains=true

    Restart=always RestartSec=2 LimitNOFILE=1048576

    [Install] WantedBy=multi-user.target 启动并检查状态:

    systemctl daemon-reload systemctl enable --now sish systemctl status sish :six: 实际使用(真的只要一行) 假设你本地有个 Web 服务跑在 8080 ,想映射到公网:

    ssh -R dev:80:127.0.0.1:8080 ssh.your-domain.xyz 成功后可直接访问:

    https://dev.your-domain.xyz http://dev.your-domain.xyz 首次 HTTPS 访问稍慢是正常的,sish 会自动去申请证书。

    一些使用中的坑与提醒 HTTPS 首次访问 ≈ 等证书,不是卡死 Cloudflare 必须灰云 公钥没放进 /opt/sish/pubkeys/ 一定连不上 VMRack 这类小鸡跑 sish 非常合适,CPU 和内存几乎没压力 总结一句 如果你手里也有一台 VMRack 或其他闲置 VPS , 不想再折腾花里胡哨的客户端, sish 是一个非常干净、实用、长期可用的内网穿透方案。

    后续我也准备用它挂开发环境、Webhook 、临时服务,比公网开端口舒服多了。

    目前尚无回复
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2665 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 23ms UTC 14:25 PVG 22:25 LAX 06:25 JFK 09:25
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86