零信任网络之-Zerotier使用涉及的常用命令及子网路由脚本 ｜095
视频地址：https://youtu.be/PNaF6fs2FlM节点加入网络命令、然后面板中勾选验证 zerotier-cli join Network_ID 子网路由 #通过ip add sh或ip a命令查看zerotier接口以及本地物理接口 #把相应的接口名称赋值给变量 PHYSICAL_IFACE=<物理网卡接口名字> ZEROTIER_IFACE=<zerotier接口名字> #开启内核转发 echo 'net.ipv4.ip_forward=1' | sudo tee -a /etc/sysctl.conf sudo sysctl -p #添加防火墙转发规则 iptables -t nat -A POSTROUTING -o $PHYSICAL_IFACE -j MASQUERADE iptables -A FORWARD -i $PHYSICAL_IFACE -o $ZEROTIER_IFACE -m state --state RELATED,ESTABLISHED -j ACCEPT iptables -A FORWARD -i $ZEROTIER_IFACE -o $PHYSICAL_IFACE -j ACCEPT iptables-save #保存规则，持久化，重启后仍有效 sudo apt install iptables-persistent -y sudo iptables-save > /etc/iptables/rules.v4子网路由落地机一键脚本 #!/bin/bash # 脚本功能：自动获取物理网卡和 ZeroTier 网卡接口名称，并设置 iptables 规则以支持 NAT 和转发 # 检查是否以 root 权限运行 if [ "$EUID" -ne 0 ]; then echo "此脚本需要以 root 权限运行，请使用 sudo 执行" exit 1 fi # 自动获取物理网卡接口名称 # 假设物理网卡是系统中主要的以太网接口（非 lo 和虚拟接口） PHYSICAL_IFACE=$(ip link show | grep -E '^[0-9]+: (en|eth|wlan)[0-9a-z]*:' | awk '{print $2}' | sed 's/://' | head -n 1) if [ -z "$PHYSICAL_IFACE" ]; then echo "错误：未找到物理网卡接口，请检查系统网络配置" exit 1 fi echo "检测到的物理网卡接口: $PHYSICAL_IFACE" # 自动获取 ZeroTier 网卡接口名称 # ZeroTier 接口通常以 zt 开头 ZEROTIER_IFACE=$(ip link show | grep -E '^[0-9]+: zt[a-z0-9]+:' | awk '{print $2}' | sed 's/://' | head -n 1) if [ -z "$ZEROTIER_IFACE" ]; then echo "错误：未找到 ZeroTier 网卡接口，请确保 ZeroTier 已安装并加入网络" exit 1 fi echo "检测到的 ZeroTier 网卡接口: $ZEROTIER_IFACE" # 启用内核转发 echo "启用内核转发..." sysctl -w net.ipv4.ip_forward=1 # 确保内核转发在重启后依然生效 if ! grep -q "net.ipv4.ip_forward=1" /etc/sysctl.conf; then echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf fi echo "内核转发已启用并设置为开机生效" # 设置 iptables 规则 echo "设置 iptables 规则..." iptables -t nat -A POSTROUTING -o "$PHYSICAL_IFACE" -j MASQUERADE iptables -A FORWARD -i "$PHYSICAL_IFACE" -o "$ZEROTIER_IFACE" -m state --state RELATED,ESTABLISHED -j ACCEPT iptables -A FORWARD -i "$ZEROTIER_IFACE" -o "$PHYSICAL_IFACE" -j ACCEPT # 保存 iptables 规则 echo "保存 iptables 规则..." iptables-save > /etc/iptables/rules.v4 # 安装 iptables-persistent 以确保规则在重启后依然有效 echo "安装 iptables-persistent..." apt update apt install iptables-persistent -y # 再次保存规则，确保持久化 iptables-save > /etc/iptables/rules.v4 echo "配置完成！" echo "物理网卡接口: $PHYSICAL_IFACE" echo "ZeroTier 网卡接口: $ZEROTIER_IFACE" echo "内核转发已启用" echo "iptables 规则已设置并保存" ACL的简单实用 # 允许指定ip间的icmp协议数据包 accept ipprotocol 1 ipsrc 192.168.191.16/32 or ipsrc 192.168.191.84/32 # ztsrc 7e435d4dae ztdest e636f3f601 ； # 丢弃所有的icmp协议数据包 drop ipprotocol 1 ; # 定义一个tag 名为deptartment id=1000（id必须唯一） # 其中该有两个枚举值，分别为不同部门，sales、admin tag department id 1000 enum 10 sales enum 20 admin ; # 部门枚举值差异为0的主机，之间icmp协议被允许 accept ipprotocol 1 and tdiff dept 0 ;
零信任网络之-Tailscale使用涉及的常用命令 ｜094
视频地址：https://youtu.be/N6Fcwyz9TKs加入节点 节点加入 tailscale up --auth-key=tskey-auth-ky1Lj4iNWo11CNTRL-Ls4d6dQCZrN6djhfnFEsNqXNpu1XcHrc 子网路由 #子网落地节点，进行子网声明 tailscale up --advertise-routes=192.168.0.0/24,192.168.1.0/24 #发起访问节点 tailscale up --accept-routes #开启内核数据转发 echo 'net.ipv4.ip_forward=1' | sudo tee -a /etc/sysctl.conf sudo sysctl -p 流量出口 #出口节点进行出口节点声明 sudo tailscale up --advertise-exit-node #发起出口访问节点运行出口指定，并且排除局域网 sudo tailscale set --exit-node=<exit-node-ip> --exit-node-allow-lan-access=true #在出口节点上开启内核的数据转发 echo 'net.ipv4.ip_forward=1' | sudo tee -a /etc/sysctl.conf sudo sysctl -p ACL相关语法 #ACL部分在使用前要把目前允许所有的规则注释掉，使用“//”注释掉 例如 // {"action": "accept","src":["*"],"dst":["*:*"],}, 根据需要进行 {"action": "accept","src":["*"],"dst":["*:*"],}, #这里的src、dst可以是 groups、tag、hosts、IP #如果使用groups、tag 和 hosts则需要在Access controls中提前声明 例如 #tag在使用前要进行所属用户声明 "tagOwners": {"tag:ubuntu-srv": ["dino.milaone@gmail.com"],}, #groups在使用前也要进行所属用户声明 "groups": { "group:example": ["alice@example.com", "bob@example.com"],},
视频地址：https://youtu.be/lRLVpbbzcCAWireGuard设置过程安装wireguard sudo apt update sudo apt install wireguard生成本地公私钥 wg genkey | sudo tee /etc/wireguard/privatekey | wg pubkey | sudo tee /etc/wireguard/publickey 编辑连接wg0的配置 sudo nano /etc/wireguard/wg0.conf VPS主机-配置文件内容： [Interface] Address = 10.10.5.2/32 ListenPort = 5632 PrivateKey = PrivateKey [Peer] PublicKey = PublicKey AllowedIPs = 10.10.5.2/32,192.168.1.0/24 #Endpoint = ip or domain:51820 PersistentKeepalive = 10 内网主机-配置文件内容： [Interface] Address = 10.10.5.1/32 ListenPort = 51820 PrivateKey = PrivateKey PostUp = iptables -A FORWARD -i %i -j ACCEPT PostUp = iptables -A FORWARD -o %i -j ACCEPT PostUp = iptables -t nat -A POSTROUTING -s 10.10.5.0/24 -j SNAT --to-source 192.168.1.194 PostDown = iptables -D FORWARD -i %i -j ACCEPT PostDown = iptables -D FORWARD -o %i -j ACCEPT PostDown = iptables -t nat -D POSTROUTING -s 10.10.5.0/24 -j SNAT --to-source 192.168.1.194 #MTU = 1200 [Peer] PublicKey = PublicKey AllowedIPs = 10.10.5.2/32 Endpoint = 127.0.0.1:5632 PersistentKeepalive = 10 内网主机开启数据转发 echo 'net.ipv4.ip_forward=1' | sudo tee -a /etc/sysctl.conf sudo sysctl -p修改全部文件权限 sudo chmod 600 /etc/wireguard/* 随启动运行 sudo systemctl enable wg-quick@wg0 sudo systemctl start wg-quick@wg0 VPS端 注意防火墙要打开5632重启wg0接口 wg-quick down wg0 && wg-quick up wg0 udp2raw部分下载udp2raw mkdir udp2raw cd udp2raw wget https://github.com/wangyu-/udp2raw/releases/download/20230206.0/udp2raw_binaries.tar.gz tar -xzf udp2raw_binaries.tar.gzserver.sh 服务端脚本 #!/bin/bash nohup /root/udp2raw/udp2raw_amd64 -s -l0.0.0.0:30005 -r127.0.0.1:5632 -k "pass" --raw-mode faketcp --cipher-mode xor -a > /root/udp2raw/udp_16400.log 2>&1 & client.sh 客户端脚本 #!/bin/bash nohup /root/udp2raw/udp2raw_amd64 -c -l0.0.0.0:5632 -r141.11.175.39:30005 -k "pass" --raw-mode faketcp --cipher-mode xor -a > /root/udp2raw/udp_16400.log 2>&1 & 修改本地主机的wg0配置文件1.添加MTU = 1200 2.修改接入点地址 stop.sh 停止后台运行脚本 #!/bin/bash echo "Stopping udp2raw instances..." pids=$(ps aux | grep udp2raw_amd64 | grep -v grep | awk '{print $2}') for pid in $pids; do kill -9 $pid echo "Stopped process with PID $pid" done echo "All udp2raw instances stopped." udp2raw各参数释义选项注释--raw-mode伪装模式，支持 faketcp/udp/icmp，用于绕过防火墙-k,--key密码设置--cipher-mode加密模式（如 aes128cbc）--auth-mode认证模式（如 md5/crc32）-a,--auto-rule自动管理iptables规则-g,--gen-rule自动生成 iptables 规则--disable-anti-replay禁用反重放保护功能--source-ip服务端IP地址--source-port服务端端口号--conf-file指定配置文件--fifo向运行中的程序发送命令--log-level日志级别（0静默, 1错误, 2警告, 3信息）--log-position设置日志文件名--disable-color禁用日志颜色输出--disable-bpf --sock-buf设置 socket 缓冲区大小--force-sock-buf --seq-mode --lower-levelMAK地址--gen-add --keep-rule定期主动检查 iptables 规则--clear清除iptables规则
打破80/443限制：家庭宽带公网发布服务的终极HTTPS直连方案
docker方式部署Nginx Proxy Manager中文镜像github仓库：https://github.com/xiaoxinpro/nginx-proxy-manager-zhdocker-compose.yml version: '3' services: app: image: 'chishin/nginx-proxy-manager-zh:release' restart: always ports: - '80:80' - '81:81' - '443:443' volumes: - ./data:/data - ./letsencrypt:/etc/letsencrypt 默认用户密码：Email: admin@example.comPassword: changemeddns go之前详细介绍ddns go的博客文章：https://www.milaone.com/archives/37.html作者官方仓库：https://github.com/jeessy2/ddns-gohost模式：推荐部署在主路由，特点是可以直接读取网卡ip信息。不用第三方检测 docker run -d --name ddns-go --restart=always --net=host -v /opt/ddns-go:/root jeessy/ddns-go 桥接模式：可部署在内网任意位置，要通过第三方ip检测获取公网ip docker run -d --name ddns-go --restart=always -p 9876:9876 -v /opt/ddns-go:/root jeessy/ddns-go 默认用户密码：首次登陆用户自动注册
1操作系统准备原则上呢使用ubuntu的20.04.6 Lts 或者debian的11.9因为新装debian要配置软件源，还得安装sudo命令，不是开机即用的。对新手不太友好。所以我选ubuntu，安装的过程都是默认选项虚拟机的硬盘大小最好选择大于60G，留点富裕量，网络连接方式选择桥接，就是直接连接到物理网络的方式啊，然后保证他可以通过梯子上网啊安装好系统后首先要做4个事， sudo apt update -y sudo apt install openssh-server -y sudo apt install screen -y ip add show #查看ubuntu的ip 这样系统安装的准备工作做好了，我接下来的工作都到ssh中操作ssh客户端连接ubuntu后,就进入真正的编译环节了2更新软件源，更新软件，安装必要依赖库 sudo apt update -y sudo apt full-upgrade -y sudo apt install -y ack antlr3 asciidoc autoconf automake autopoint binutils bison build-essential \ bzip2 ccache cmake cpio curl device-tree-compiler fastjar flex gawk gettext gcc-multilib g++-multilib \ git gperf haveged help2man intltool libc6-dev-i386 libelf-dev libfuse-dev libglib2.0-dev libgmp3-dev \ libltdl-dev libmpc-dev libmpfr-dev libncurses5-dev libncursesw5-dev libpython3-dev libreadline-dev \ libssl-dev libtool lrzsz mkisofs msmtp ninja-build p7zip p7zip-full patch pkgconf python2.7 python3 \ python3-pyelftools python3-setuptools qemu-utils rsync scons squashfs-tools subversion swig texinfo \ uglifyjs upx-ucl unzip vim wget xmlto xxd zlib1g-dev 3克隆代码到本地，更新feeds git clone https://github.com/coolsnowwolf/lede cd lede ./scripts/feeds update -a ./scripts/feeds install -a 4进入配置页面 make menuconfig 5 下载DL库，编译 make download -j8 make V=s -j1 第一遍编译结束后如无出错，可以看到编译正常结束。就继续第二遍加入第三方feeds选择更多应用6 加入第三方订阅源更新，并再次配置sed -i '$a src-git kenzo https://github.com/kenzok8/openwrt-packages' feeds.conf.default sed -i '$a src-git small https://github.com/kenzok8/small' feeds.conf.default git pull ./scripts/feeds update -a ./scripts/feeds install -a make menuconfig 7再次编译 make download -j8 make V=s -j1 注:如需重新配置 rm -rf .config make menuconfig make V=s -j$(nproc)
Cloudfare邮件路由功能+Gmail定制你的私人域名的个性化邮件地址
[白话教程]从头捋捋内网穿透工具frp的各种工作模式总有一款适合你|内网穿透|内网反代|frp内网代理|frp安装与配置
frp的工作模式无非几种，接下来分别梳理一下没中工作模式的服务端和客户端的配置方式1.简单的tcp类型单一端口的代理例如通过ssh访问内网,3389端口的rdp远程桌面，或其他的单一tcp端口的服务配置方式frps.toml(或.ini)：配置 bindPort = 7000 auth.method = "token" auth.token = "12345678" #开启服务器端控制面板 webServer.addr = "0.0.0.0" webServer.port = 7500 webServer.user = "admin" webServer.password = "admin"frpc.toml(或.ini)： #x.x.x.x为服务器的公网ip serverAddr = "x.x.x.x" serverPort = 7000 [[proxies]] name = "ssh" type = "tcp" localIP = "0.0.0.0" localPort = 22 remotePort = 6000 使用方式 #x.x.x.x为服务器的公网ip ssh -o Port=6000 test@x.x.x.x 或者 ssh test@x.x.x.x -p 60002.通过域名转发http访问配置方式frps.toml(或.ini)：配置 bindPort = 7000 auth.method = "token" auth.token = "12345678" vhost_http_port = 8080 #开启服务器端控制面板 webServer.addr = "0.0.0.0" webServer.port = 7500 webServer.user = "admin" webServer.password = "admin"frpc.toml(或.ini)： serverAddr = "129.146.175.75" serverPort = 7000 [[proxies]] name = "web" type = "http" localPort = 80 customDomains = ["www.yourdomain.com"]使用方式 http://www.yourdomain.com3.简单的文件下载服务配置方式frps.toml(或.ini)：配置 bindPort = 7000 auth.method = "token" auth.token = "12345678" vhost_http_port = 8080 #开启服务器端控制面板 webServer.addr = "0.0.0.0" webServer.port = 7500 webServer.user = "admin" webServer.password = "admin"frpc.toml(或.ini)： serverAddr = "129.146.175.75" serverPort = 7000 [[proxies]] name = "test_static_file" type = "tcp" remotePort = 6000 [proxies.plugin] type = "static_file" # 本地文件目录，对外提供访问 localPath = "/tmp/file" # URL 中的前缀，将被去除，保留的内容即为要访问的文件路径 stripPrefix = "download" httpUser = "admin" httpPassword = "admin" 使用方式http://x.x.x.x:6000/download4.点对点内网穿透stcp xtcp代理配置方式这个配置需要3个配置，服务器端，内网中被访问的主机，主动访问的主机服务器端:（绿机）frps.toml bindPort = 7000 auth.method = "token" auth.token = "12345678" vhost_http_port = 8080 #开启服务器端控制面板 webServer.addr = "0.0.0.0" webServer.port = 7500 webServer.user = "admin" webServer.password = "admin"内网中被访问的主机 serverAddr = "x.x.x.x" serverPort = 7000 # 如果默认的 STUN 服务器不可用，可以配置一个新的 STUN 服务器 # natHoleStunServer = "xxx" [[proxies]] name = "p2p_ssh" type = "xtcp" # 只有共享密钥 (secretKey) 与服务器端一致的用户才能访问该服务 secretKey = "abcdefg" localIP = "127.0.0.1" localPort = 22主动访问的主机（蓝机） serverAddr = "x.x.x.x" serverPort = 7000 # 如果默认的 STUN 服务器不可用，可以配置一个新的 STUN 服务器 # natHoleStunServer = "xxx" [[visitors]] name = "p2p_ssh_visitor" type = "xtcp" # 要访问的 P2P 代理的名称 serverName = "p2p_ssh" secretKey = "abcdefg" # 绑定本地端口以访问 SSH 服务 bindAddr = "127.0.0.1" bindPort = 6000 # 如果需要自动保持隧道打开，将其设置为 true # keepTunnelOpen = false使用方式 ssh -oPort=6000 test@127.0.0.1