OK 记录一下自己通过域名访问内网服务的一些手法
个人喜欢倒腾一些乱七八糟的玩意儿,喜欢在自己的电脑上搭建一些东西,又不满足于只能在家里玩,所以有了内网穿透的想法。
起先打电话问运营商要固定IP,运营商:不给!
后来又看到有IPv6方式实现内网穿透的,但是好像只支持IPv6网络去访问,也没试通。
最后,朋友给我推荐了Tailscale,用起来发现真的香。
说下一个大概的思路,然后和我用到的物料,最后再说下实操手法。
我的需求就是可以访问内网的一些服务,比如PVE的控制台、OpenRouter的管理界面、还有自己玩的一些小项目,当然了还必须要有ssh访问到家里的服务器!
这些需求首先肯定要实现内网穿透,我选的Tailscale,所有的流量都走自建节点。然后访问家里的服务的话最好是有个域名,通过域名地址访问就好了。至于ssh我选的是通过堡垒机的方式去连接,选的JumpServer。
至于实现原理,就是通过Tailscale提供的内网穿透服务和自建中继服务器,实现公网可以访问内网服务。 通过1Panel搭建网站和申请SSL证书(需要DNS RAM),实现理论上的无限免费续期SSL证书。
再说下物料:
- 一台访问起来延迟较低的服务器,一般是国内服务器。
- 一个域名,二级域名即可。(假设你用国内服务器,需要备案)
- 一个 SSL 证书,这个非常关键,下面会介绍如何申请。
根据物料说下我的实际选择,一台VPS(很低配置就可以了、可以装一个1Panel、装docker、带宽也不用很高,比家里的上传带宽高一点就行了,除非你家里的上传带宽很高)、一个域名、然后把域名挂在CloudFlare去。
为啥我选择的不是国内服务器呢?毕竟国内服务器的延迟很低,因为要备案呀… 现在很多VPS都非常廉价了,随便选一个就得了。然后如果非要选国内服务器的话可以看看雨云,弹性带宽性价比高的离谱。
OK 终于到操作了
第一步 先注册一个Tailscale的账号,注意邮箱千万不要用公司邮箱,否则后面会让你付费,普通的163 outlook gmail就可以了
第二步 ssh到自己的公网服务器,执行Tailscale的一键安装脚本
curl -fsSL https://Tailscale.com/install.sh | sh
第三步 启动
tailscale up --accept-routes
# 启动之后有个链接 复制到刚才登录Tailscale的浏览器点Connect就可以了
第四步 内网电脑也安装下Tailscale 执行一键安装就行了 也启动它
# 正常启动是这样
tailscale up --accept-routes
# 但是如果你想把自己的子网也广播出去(假设你同一个网关下有多台机器那就非常建议你广播出去了)
tailscale up --accept-routes --advertise-routes=192.168.1.0/24
第五步 配置 如果你刚才选择了广播子网那就要去Tailscale控制台选择 Edit route settings 允许广播后生效
第六步 验证一下 在公网服务器ping一下你的内网IP 能ping通就说明没问题了
第七步 搭建DERP 这里是用docker拉一个镜像然后跑起来就行了 如果你是国外VPS的话直接跑就行了 docker.io是完全可以访问通的 国内服务器的话就自己找一个吧很多 或者看后面的步骤先安装1Panel 1Panel会提供给你一个加速镜像源
OK 第7.1步 整个二级域名 比如derp.xxx.com 解析到你这台公网服务器上
然后拉取certbot并启动申请证书
# 启动后交互式命令行第一个选择 1 之后输入需要申请SSL证书域名即可(例如xxx.xxx.com)
docker run -it --rm --name certbot -v "/etc/letsencrypt:/etc/letsencrypt" -v "/var/lib/letsencrypt:/var/lib/letsencrypt" -p 80:80 certbot/certbot certonly
第7.2步 弄完证书就直接跑下derper就行了 看别的教程说的是derper要用443端口 没必要宝贝 信我的用8443就行 443咱要留着给1Panel用
# derper服务占用8443端口 没有使用443端口是防止与1Panel的OpenResty的端口冲突
# xxx.xxx.com换成刚才用certbot申请证书的域名
docker run --restart always \
--name derper -p 8443:8443 -p 3478:3478/udp \
-e DERP_CERT_MODE=manual \
-v /etc/letsencrypt/live/DERP/fullchain.pem:/app/certs/xxx.xxx.com.crt \
-v /etc/letsencrypt/live/xxx.xxx.com/privkey.pem:/app/certs/xxx.xxx.com.key \
-e DERP_ADDR=:8443 \
-e DERP_STUN=true \
-e DERP_DOMAIN=xxx.xxx.com \
-e DERP_HTTP_PORT=-1 \
-d fredliang/derper:latest
到这里,其实就差不多了,记得安全组放行下端口(UDP/3478 和 TCP/8443),放行完了到浏览器输入验证DERP服务是否成功输入你的域名:8443去访问。看到下面这个图片就OK了。
最后,再去Tailscale配置下Access controls,看图就行了
// 登录Tailscale Admin Console 修改 Access controls 配置
// 直达地址: https://login.Tailscale.com/admin/acls/file
// 找到 derpMap 属性并修改(没有的话增加)
{
// 此处仅展示 derpMap 配置项
"derpMap": {
"OmitDefaultRegions": true, // 是否忽略默认的服务器 建议设置为 true 仅使用自建中继服务器
"Regions": {
"900": {
"RegionID": 900, // 整数数字 范围在[900, 999]
"RegionCode": "Beijing", // 服务器区域代码 如果多台机器可设定不同名称易于区分
"RegionName": "Beijing", // 服务器名字
"Nodes": [
{
"Name": "1",
"RegionID": 900,
"HostName": "xxx.xxx.com", // 用certbot申请证书的域名
"DERPPort": 8443 // 端口 这里用的是 8443
}
]
}
}
}
}
最后,只要是安装了Tailscale的机器都执行下 tailscale netcheck 看看现在的穿透走的是不是你搭建的DERP通道
OK 恭喜你实现了内网穿透!!!
现在你在公网服务器上就已经可以访问你的内网服务了,或者你在公网上直接配个nginx转发,你完全可以利用IP+端口号访问你的服务了。
但是,这种IP+Port的方式并不优雅!我们一定要把服务器的资源压榨到底!
接下来,搞1Panel和永久免费的SSL。
直接一键安装就完事了 安装完会给你怎么登录
bash bash -c "$(curl -sSL https://resource.fit2cloud.com/1panel/package/v2/quick_start.sh)"
把你需要访问的域名解析到公网IP,这里建议使用泛解析哈 *.a.b.com 的这种,解析一次就完事了。
然后再配置下DNS账号,Cloudflare的就一串字符串,自己搜搜吧,阿里云的是一个key一个value。
最后就在1Panel-网站功能里随便设置你的反向代理就完事了!
具体的网站配置和阿里云配置可以看下这篇笔记




