Unraid/NAS网络篇(docker-compose 部署配置)
外网访问(内网穿透)
CloudFlare 需要一个自备一个域名 (推荐)
frp 一台云主机(公网 IP)可能也需要一个域名
zerotie 仅需要注册账号,实际体验网速太慢,不推荐
DDNS + IPv6 (未部署测试,CloudFlare 已经够用)
CloudFlare Tunnel
参考列表
CloudFlare Tunnel 免费内网穿透的简明教程 - 少数派
frp
frps 服务端部署 (公网 IP 所在机器)
1. 创建配置文件 (最简单的模式)
$ sudo vim /etc/systemd/frp/frps.toml
# server
bindPort = 7000
vhostHTTPPort = 28080
2. 创建systemd配置文件
$ sudo vim /etc/systemd/system/frps.service
#systemd
[Unit]
# 服务名称,可自定义
Description = frp server
After = network.target syslog.target
Wants = network.target
[Service]
Type = simple
# 启动frps的命令,需修改为您的frps的安装路径
ExecStart = /etc/systemd/frp/frps -c /etc/systemd/frp/frps.toml
[Install]
WantedBy = multi-user.target
3. 启动
# 启动frp
sudo systemctl start frps
# 停止frp
sudo systemctl stop frps
# 重启frp
sudo systemctl restart frps
# 查看frp状态
sudo systemctl status frps
参考文档
此示例演示如何在 Linux 系统下使用 systemd 来管理 frps 服务,包括启动、停止、配置后台运行和设置开机自启动。
https://gofrp.org/zh-cn/docs/setup/systemd/
frpc (自己的 unraid /NAS 上)
1. 创建配置文件
$ vim frpc.toml
# client
serverAddr = "60.20.17.17"
serverPort = 7000
[[proxies]]
name = "web"
type = "http"
localPort = 80
customDomains = ["60.20.17.17"]
2. 同目录下创建 Dockerfile(unraid 命令行启动之后一段时间程序就不见了,猜测可能是需要 docker 容器启动才行,所以需要打个 docker 镜像)
FROM alpine:3.8
LABEL maintainer="xxxxixxixi"
ENV TZ=Asia/Shanghai
WORKDIR /
RUN apk add --no-cache tzdata
&& ln -snf /usr/share/zoneinfo/${TZ} /etc/localtime
&& echo ${TZ} > /etc/timezone
COPY frpc /
COPY frpc.toml /frp/
CMD /frpc -c /frp/frpc.toml
3. 构建镜像
docker build -t myfrpc:1.0.0 .
4. 编写 compose文件
docker-compose.yaml
version: '3.3'
services:
frpc:
restart: always
network_mode: host
container_name: frpc
image: myfrpc:1.0.0
5. 启动
参考列表
Dockerfile详解 通过docker build -t repository:tag ./ 即可构建,要求:./下存在Dockerfile文件 之前我们聊的镜像分层…
https://www.jianshu.com/p/4508784f6ddc
魔法
clash (推荐)
services:
clash:
# 看自己使用的 clash 的内核 哪种
image: metacubex/clash-meta:latest
#image: dreamacro/clash:latest
container_name: clash-meta
restart: always
network_mode: host
privileged: true
logging:
driver: "json-file"
options:
max-size: "10m"
volumes:
# 将自己使用的 config.yaml 复制到部署的 ./config/config.yaml
- ./config/config.yaml:/root/.config/clash/config.yaml
V2rayA
version: '3.3'
services:
v2raya:
container_name: v2raya
image: mzz2017/v2raya:latest
restart: always
network_mode: host
privileged: true
logging:
driver: "json-file"
options:
max-size: "10m"
environment:
- V2RAYA_LOG_FILE=/tmp/v2raya.log
- V2RAYA_V2RAY_BIN=/usr/local/bin/v2ray
- V2RAYA_NFTABLES_SUPPORT=off
- IPTABLES_MODE=legacy
volumes:
- /lib/modules:/lib/modules:ro
- /etc/resolv.conf:/etc/resolv.conf
- /etc/v2raya:/etc/v2raya
参考列表
Project V 由以下几部分组成:
https://www.v2ray.com/developer/
v2rayA/README_zh.md at main · v2rayA/v2rayA
A web GUI client of Project V which supports VMess, VLESS, SS, SSR, Trojan, Tuic and Juicity protocols. 🚀 - v2rayA/v2rayA
https://github.com/v2rayA/v2rayA/blob/main/README_zh.md
安装内核和 v2rayA
https://v2raya.org/docs/prologue/installation/docker/
docker 网络
1. 开启 IPv6 支持
2. 创建名为inner_net 的 docker 网络(之后可以将应用指定 docker 网络为 inner_net)
docker network create --ipv6 --subnet=172.29.0.0/16 --subnet=2001:db8:2::/64 --gateway=172.29.0.1 --gateway=2001:db8:2::1 inner_net
参考列表
How to enable IPv6 support in the Docker daemon
https://docs.docker.com/config/daemon/ipv6/
防火墙
本人不是专家,仅做了简单处理。 策略如下:
允许所有的内网连接
允许(外网)的RELATED, ESTABLISHED 连接(可以给外网返回数据,不允许外网主动请求进来)(CloudFlare是通过部署的docker容器实例将流量转发,所以通过 cloudflare 进来的请求没有问题)
禁止所有的其他连接
# zerotier
iptables -t nat -A PREROUTING -s 10.241.0.0/16 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.3:80
iptables -A INPUT -s 10.241.0.0/16 -p tcp --dport 80 -j ACCEPT
# allow all docker & lan
iptables -I INPUT -s 172.29.0.0/16 -j ACCEPT
iptables -I INPUT -s 192.168.1.0/24 -j ACCEPT
# reject all input except RELATED,ESTABLISHED packages
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -j DROP
# 允许所有的本地连接 docker & lan
ip6tables -A INPUT -s fe80::/64 -j ACCEPT
ip6tables -A INPUT -s 2001:db8:2::/64 -j ACCEPT
# reject all input except RELATED,ESTABLISHED packages
ip6tables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
ip6tables -A INPUT -j DROP
iptables -nvL INPUT
iptables -nvL INPUT --line


酷客888
校验提示文案
酷客888
校验提示文案