he-sb / tech

My blog related to technique.
MIT License
9 stars 2 forks source link

homelab - 3. 基础设施建设 - 网关 #50

Open he-sb opened 1 year ago

he-sb commented 1 year ago
  1. 主网关
  2. 旁路网关
  3. 反向代理(Traefik)
    • 对内网提供的服务。需要一个统一的入口
    • 自动服务发现
he-sb commented 1 year ago

参考链接:

  1. ROS等路由器MTU值取值及修改详解-山隈的博客
  2. 谈一谈1G瓶颈的原理和影响-路由器交流
he-sb commented 1 year ago

旁路网关

使用 clash 搭建透明网关实现旁路科学上网自由 - akiyaの博客

Linux系统结合clash做旁路网关/透明代理 - 长风记录

he-sb commented 1 year ago

Traefik

新手入门 - Træfɪk中国

Traefik

Traefik-v2.x快速入门 - 腾讯云开发者社区-腾讯云

Archive of Andrew's Blog

Ultimate Traefik Docker Compose Guide [2022] with LetsEncrypt | SHB 参考【Security_Headers_as_Middlewares_File】小节配置 headers 信息

Traefik 另类的服务暴露方式 - bleem

Traefik 2 监控系统之Grafana Prometheus Promtail Loki完美结合 - 简书

HTTP to HTTPS redirects with Traefik | Jens Knipper

#Traefik 配置http自动跳转到https


traefik 定义路由时指定的 Host 字段必须用反引号包裹,避免域名被错误的转义(go 语言的特性,参考 https://www.smarthomebeginner.com/traefik-docker-compose-guide-2022/


docker network create traefik

docker-compose.yml

```yml version: '3' services: traefik: container_name: traefik image: traefik:v2.9.5 restart: always ports: - target: 80 published: 80 mode: host - target: 443 published: 443 mode: host - '8080:8080' network_mode: host command: - '--global.sendanonymoususage=false' - '--global.checknewversion=false' - '--entrypoints.http.address=:80' - '--entrypoints.https.address=:443' - '--api=true' - '--api.insecure=true' - '--api.dashboard=true' - '--api.debug=false' - '--ping=true' - '--log.level=warn' - '--log.format=common' - '--accesslog=false' # 向 Prometheus 暴露监控指标 # https://doc.traefik.io/traefik/observability/metrics/prometheus/ - '--metrics.prometheus=true' - '--metrics.prometheus.buckets=0.1,0.3,1.2,5.0' - '--metrics.prometheus.entryPoint=http' - '--providers.docker=true' - '--providers.docker.watch=true' - '--providers.docker.exposedbydefault=false' - '--providers.docker.endpoint=unix:///var/run/docker.sock' - '--providers.docker.swarmMode=false' - '--providers.docker.useBindPortIP=false' - '--providers.docker.network=traefik' - '--providers.file=true' - '--providers.file.watch=true' - '--providers.file.directory=/etc/traefik/config' - '--providers.file.debugloggeneratedtemplate=true' volumes: - /etc/localtime:/etc/localtime:ro - /etc/timezone:/etc/timezone:ro - /var/run/docker.sock:/var/run/docker.sock:ro - ./config/:/etc/traefik/config/:ro - ./ssl/:/data/ssl/:ro healthcheck: test: ['CMD-SHELL', 'wget -q --spider --proxy off localhost:8080/ping || exit 1'] interval: 3s retries: 12 logging: driver: 'json-file' options: max-size: '1m' ```

config/traefik.yml

```yml http: routers: traefik-default: entrypoints: 'http' rule: 'Host(`traefik.he-sb.home`)' service: 'dashboard@internal' traefik-dashboard: entrypoints: 'http' rule: 'Host(`traefik.he-sb.home`) && PathPrefix(`/`)' service: 'dashboard@internal' traefik-api: entrypoints: 'http' rule: 'Host(`traefik.he-sb.home`) && PathPrefix(`/api`)' service: 'api@internal' traefik-ping: entrypoints: 'http' rule: 'Host(`traefik.he-sb.home`) && PathPrefix(`/ping`)' service: 'ping@internal' ```
he-sb commented 1 year ago

DNS(考虑单独撰文)

利用 Mosdns 和 AdGuardHome 搭建自己的 DNS


若 53 端口被 systemd-resolved 服务占用:

# 停止 systemd-resolved 服务并关闭自启
sudo systemctl stop systemd-resolved
sudo systemctl disable systemd-resolved
# 删除 /etc/resolve.conf 软链接,新建一个,写入下方内容后保存
nameserver 127.0.0.1
# 重启网络服务(或直接重启机器)
sudo systemctl restart networking

systemd-resolved关闭-掘金


mosdns 参考配置:

he-sb commented 1 year ago

ROS + 旁路网关(依赖纯净 DNS)

目前最强双软路由形态,ROS配合OpenWrt,最稳定方案,mangle标记以及DNS分流,MosDNS分流,AdGuard Home去广告,第一期 - YouTube

目前最强双软路由形态,ROS配合OpenWrt,最稳定方案,mangle标记以及DNS分流,MosDNS分流,AdGuard Home去广告,第二期 - YouTube

he-sb commented 1 year ago

cloudflared 打通内网

Cloudflared 两步打通内外服务::木木木木木

he-sb commented 1 year ago

ipv6

爱快IPV6/openwrtIPV6旁路/IPV6监听IPV4转发/DDNS双栈/PVE的IPV6 - 奇衡三

浅谈 Linux 上的 SLAAC:原理、配置和系统行为 | 星尘独奏曲

AWS上进行Docker IPv6改造总结 · 一人游走

爱快IPV6/openwrtIPV6旁路/IPV6监听IPV4转发/DDNS双栈/PVE的IPV6 | 树莓盘论坛

he-sb commented 1 year ago

headscale

参考链接(待整理):

~~[使用Tailscale远程访问局域网 | Escape](https://www.escapelife.site/posts/bb022c74.html)~~ ~~[使用 docker 安装 derp 成功了,但是 headscale 不知道如何设置自建 derp](https://www.v2ex.com/t/862296)~~ ~~[【Headscale】自部署 Tailscale 服务端](https://lxnchan.cn/headscale.html)~~ [Headscale 使用手记](https://haoyu.love/blog1356.html) ~~[我的服务器系列:tailscale使用自定义derper服务器(docker部署) - 霖的个人开发笔记](https://www.linshenkx.cn/archives/tailscale-derper-docker)~~ ~~[如何利用 Caddy 搭建 Tailscale 的 Custom DERP Servers](https://www.xukecheng.tech/how-to-deploy-tailscale-custom-derper-servers-by-caddy)~~ ~~[创建 Tailscale derper · Issue #219 · Bpazy/blog · GitHub](https://github.com/Bpazy/blog/issues/219)~~ ~~[基于 Caddy2 部署私有 DERP 中继服务器 - 缘生笔记](https://ysicing.me/docs/system/tailscale/caddy-derper-proxy)~~ ~~[使用 acme.sh 配置自动续签 SSL 证书 - 烧饼博客](https://u.sb/acme-sh-ssl/)~~ [Debian 11 / Ubuntu 22.04 安装 Docker 以及 Docker Compose 教程 - 烧饼博客](https://u.sb/debian-install-docker/) 文末 - docker 开启 ipv6 (https://docs.docker.com/config/daemon/ipv6/) [Headscale 搭建 P2P 内网穿透 - bleem](https://mritd.com/2022/10/19/use-headscale-to-build-a-p2p-network/) [Configuring the Headscale UI :: Guru Computing Blog](https://blog.gurucomputing.com.au/smart-vpns-with-headscale/configuring-the-headscale-ui/) [搭建属于自己的Tailscale网络 :: Max的技术栈](https://maxng.cc/posts/headscale-ez-tutorial/) [Tailscale 组网 - 自建 Headscale | 默](https://jasper1024.com/jasper/20221211104127/) [Tailscale 组网 - 自建 DERP | 默](https://jasper1024.com/jasper/20221211110202/)

自定义 derper 服务器

```json5 // Example/default ACLs for unrestricted connections. { "ssh": [ ... ], "derpMap": { "OmitDefaultRegions": false, // 可以设置为 true,这样不会下发官方的 derper 节点,测试或者实际使用都可以考虑打开 "Regions": { "900": { "RegionID": 900, // 地区 id,取值范围 900-999 "RegionCode": "derper-sb", // 地区代码(地区名简写) "RegionName": "derper from he-sb", // 地区名(全名) "Nodes": [ { "Name": "derper-sb1", // 节点名,全局唯一 "RegionID": 900, // 节点所属地区 "HostName": "", // 自定义域名 "DERPPort": 443, // 默认为 443 端口 "InsecureForTests": false, // 自签名证书需要关闭证书校验 }, ], }, }, }, } ```

启动 tailscale

```bash # 使用官方控制平面 sudo tailscale up --accept-routes=true --accept-dns=false --advertise-exit-node --advertise-routes=192.168.1.0/24 # 自建 headscale 作为控制平面 ## 网关(headscale 内网)处使用 sudo tailscale up --accept-routes=true --accept-dns=false --login-server= --auth-key= --advertise-exit-node --advertise-routes=192.168.1.0/24,10.0.0.0/24 ## 子网(headscale 内网)设备使用(Linux) sudo tailscale up --accept-routes=true --accept-dns=false --login-server= --auth-key= --advertise-exit-node --advertise-routes=192.168.1.0/24 --exit-node= --exit-node-allow-lan-access=true ## 子网(headscale 内网)设备使用(Windows) ## 使用管理员权限的 PowerShell 执行 tailscale up --accept-routes=true --accept-dns=true --login-server= --auth-key= --exit-node= --exit-node-allow-lan-access=true --unattended ```

配置 tailscale 所在机器的防火墙

sudo ufw allow in on tailscale0
sudo ufw allow 41641/udp
sudo ufw reload

自定义 Tailscale 建立连接使用的端口

默认端口为 41641,win 修改方法:

其他自定义参数,以及其他平台的修改方法参考 tailscaled daemon · Tailscale Docs


参考链接:

  1. Use UFW to lock down an Ubuntu server · Tailscale
  2. Using Tailscale with your firewall · Tailscale