blog/source/_posts/office_visit_home_server.md

5.7 KiB
Raw Blame History

title: 在公司无感访问家里的服务 tags: [] categories: [] date: 2024-01-11 09:05:48

简述

家里有一台ALL in Boom跑了一些服务在家里因为可以控制DNS可以无感访问在公司内就没办法使用这些服务了所以需要一种方式在外可以访问家里的服务并且在常用环境做到低延迟访问

想法如下:

家庭环境中由于可以控制DNS直接在Linux主机部署一个Nginx然后修改路由器的域名映射将一些自己的域名直接解析到主机上。

其他环境中使用CloudFlare的tunnel提供内网穿透及域名解析服务

公司环境中因为个人经常访问如果每次都经过cloudFlare就太慢了所以需要用一些手段加速访问。方案是frp穿透到公网办公电脑用nginx代理到frp端口加速访问这样延迟大大降低。

为什么将clash单独列出来是因为host文件无法生效需要对clash做一些改动

域名相关

域名使用两套

xxx.com 这个是我自购的域名 xxx.net 这个是虚构的域名,只存在局域网中

家庭环境

家庭内环境介绍:

路由器使用刷机路由自带frp

Linux主机由PVE虚拟化而来固定IP跑各种docker服务

家庭电脑:无特殊配置,仅需连接到路由器

路由器配置

域名配置使用了OpenWrt的主机名配置将需要的域名指向Linux主机

每个路由器配置不同

Linux主机配置

linux主机只需要配置一个nginx代理即可。

nginx我使用的nginx proxy manager,上手简单,且可以浏览器管理。

使用docker-compose部署

version: '3.8'
services:
  app:
    image: 'jc21/nginx-proxy-manager:2.10.4'
    restart: unless-stopped
    ports:
      - '80:80'
      - '84:81'
    volumes:
      - ./data:/data
  healthcheck:
    test: ["CMD", "/bin/check-health"]
    interval: 10s
    timeout: 3s      

拉起容器后,可以使用 ip:84 修改一下用户名等信息,默认用户名密码:admin@example.com/changeme

配置域名代理

代理服务的端口即可

测试访问

使用接入路由器的任意主机,访问这些域名,看是否能访问到

公网环境

公网环境需要做以下准备:

  1. 自购域名并迁移到cloudflare
  2. 创建一个tunnel隧道

相关文档:

tunnel国内访问速度极慢本方法只用于紧急访问正常情况下基本无法使用

运行tunnel隧道

在页面创建完成后会给你部署客户端的命令这里我是用docker创建

运行完成后,就可以看到客户端了,即完成了客户端的部署

配置隧道

进入隧道详情,公共主机名,添加主机名

以其中的一个域名为例

subdomain子域名比如blog.xxx.comblog就是子域名

domain域名这里选择你迁移到cloudflare的域名

service→Type什么协议

url从隧道客户端访问应该用什么样的IP和端口

创建完成后,等待几分钟,即可访问

办公环境

公司设置是为了加速访问所以直接通过frp访问

暴漏服务

因为有一台云上的Linux主机所以对我来说最快的方式是使用frp将服务暴漏出来然后通过ip:port访问服务。

frp部署本次忽略可自行搜索教程

frp只用暴漏家内的nginx端口即可。也就是80端口不用一个一个将服务暴漏出来。

Nginx配置

nginx配置的模板如下

因为这里只是代理作用使用HTTP代理会有各种各样的配置直接用TCP代理能简化配置流程

stream {
    log_format proxy '$remote_addr [$time_local] '
    '$protocol $status $bytes_sent $bytes_received '
    '$session_time "$upstream_addr" '
    '"$upstream_bytes_sent" "$upstream_bytes_received" "$upstream_connect_time"';
    access_log /Nginx/logs/tcp.log proxy ;
    #将12345端口转发到192.168.1.23的3306端口
    server {
        listen 80;
        proxy_connect_timeout 5s;
        proxy_timeout 3600s;
        proxy_pass xxx.xxx.xxx.xxx:port;  # 替换成自己的ip,端口
    }
 }

修改nginx/conf/nginx.conf这里直接使用TCP代理即可

Host配置

windows为例用管理员模式修改C:\Windows\System32\drivers\etc\hosts文件

增加以下内容

127.0.0.1 outline.lianglianglee.com
127.0.0.1 gitea.lianglianglee.com
127.0.0.1 s3.lianglianglee.com
127.0.0.1 s3-admin.lll.net

修改完成后,保存

如遇无法保存,可以把文件复制出来,改动后再复制进去

在浏览器打开配置的域名在控制台看目标地址及端口是否是本地的nginx端口

杂项

clash和host不兼容的问题

办公电脑配置完成后浏览器无法访问但是使用curl又可以访问。

顺其自然打开了浏览器的控制台,发现请求的竟然是127.0.0.1:7890端口走的clash所以无法访问

进入clash的Settings/System Proxy/Bypass Domin/IPNet/Edit

将自定义的域名加进去即可

  - outline.lianglianglee.com
  - gitea.lianglianglee.com
  - s3.lianglianglee.com
  - s3-admin.lll.net

重启clash即可访问到域名