VPC Network DiagramOPC.png前言: 我之前的博客是部署在家中的機器，發現Oracle 提供雲免費套餐服務，包括2 個基於 AMD 的計算虛擬機，每個虛擬機配備 2Core CPU 和 1 GB 內存，對於私人博客是夠用，開始嘗試將部份服務轉移到Oracle的VPC內，於是就有了這篇記錄。目錄內容: DockerDNMPDDNSACMEVPNZeroTierTailscaleRcloneDocker DNMP(GitHub - yeszao/dnmp)DNMP （Docker + Nginx + MySQL + PHP7/5 + Redis）是一款全功能的LNMP一鍵安裝程序。我主要是用於建立私人博客，用文字記錄生活。默認支持pdo_mysql、mysqli、mbstring、gd、curl、opcache等常用熱門擴展，根據環境靈活配置。version: "3" services: nginx: build: context: ./services/nginx args: NGINX_VERSION: nginx:${NGINX_VERSION} CONTAINER_PACKAGE_URL: ${CONTAINER_PACKAGE_URL} NGINX_INSTALL_APPS: ${NGINX_INSTALL_APPS} container_name: nginx ports: #- "${NGINX_HTTP_HOST_PORT}:80" #- "${NGINX_HTTPS_HOST_PORT}:443" - "1080:1080" - "2080:2080" - "3080:3080" volumes: - ${SOURCE_DIR}:/www/:rw - ${NGINX_SSL_CERTIFICATE_DIR}:/ssl:rw - ${NGINX_CONFD_DIR}:/etc/nginx/conf.d/:rw - ${NGINX_CONF_FILE}:/etc/nginx/nginx.conf:ro - ${NGINX_FASTCGI_PHP_CONF}:/etc/nginx/fastcgi-php.conf:ro - ${NGINX_FASTCGI_PARAMS}:/etc/nginx/fastcgi_params:ro - ${NGINX_LOG_DIR}:/var/log/nginx/:rw environment: TZ: "$TZ" restart: always networks: - default php: build: context: ./services/php args: PHP_VERSION: php:${PHP_VERSION}-fpm-alpine CONTAINER_PACKAGE_URL: ${CONTAINER_PACKAGE_URL} PHP_EXTENSIONS: ${PHP_EXTENSIONS} TZ: "$TZ" container_name: php expose: - 9501 extra_hosts: - "www.site1.com:172.17.0.1" volumes: - ${SOURCE_DIR}:/www/:rw - ${PHP_PHP_CONF_FILE}:/usr/local/etc/php/php.ini:ro - ${PHP_FPM_CONF_FILE}:/usr/local/etc/php-fpm.d/www.conf:rw - ${PHP_LOG_DIR}:/var/log/php - ${DATA_DIR}/composer:/tmp/composer restart: always cap_add: - SYS_PTRACE networks: - default mysql: image: mysql:${MYSQL_VERSION} container_name: mysql ports: - "${MYSQL_HOST_PORT}:3306" volumes: - ${MYSQL_CONF_FILE}:/etc/mysql/conf.d/mysql.cnf:ro - ${DATA_DIR}/mysql:/var/lib/mysql/:rw restart: always networks: - default environment: MYSQL_ROOT_PASSWORD: "${MYSQL_ROOT_PASSWORD}" TZ: "$TZ" networks: default:返回目錄內容DDNS (qmcgaw/ddns-updater)輕量型容器，可定期為多個 DNS 供應商更新 DNS A 和/或 AAAA 記錄，主要更新自己的域名，還可以查看DDNS更新狀態，非常方便。DDNS_2022-01-26_105400.pngversion: "3.7" services: ddns-updater: image: qmcgaw/ddns-updater container_name: ddns-updater network_mode: bridge ports: - 8000:8000/tcp volumes: - ./data:/updater/data environment: - CONFIG= - PERIOD=5m - IP_METHOD=cycle - IPV4_METHOD=cycle - IPV6_METHOD=cycle - HTTP_TIMEOUT=10s # Web UI - LISTENING_PORT=8000 - ROOT_URL=/ # Backup - BACKUP_PERIOD=0 # 0 to disable - BACKUP_DIRECTORY=/updater/data # Other - TZ=Asia/Hong_Kong restart: alwaysdata/config.json配置{ "settings": [ { "provider": "cloudflare", "zone_identifier": "%RoL['a0fw>9Gxu", #自行穫取 "domain": "kingtam.win", "host": "@", "ttl": 600, "token": "%RoL['a0fw>9Gxu", #自行穫取 "ip_version": "ipv4" } ] }返回目錄內容ACME acme.sh 實現了 acme 協議, 可以從 letsencrypt 生成免費的證書，如果是使用 freenom 域名，可配合 luolongfei 大佬的域名自動續期，無論是域名還是TLS證書也變得全自動，永不過期。最後使用nginx服務器, 反代自己的博客。https://github.com/acmesh-official/acme.shgit clone https://github.com/acmesh-official/acme.sh.git cd ./acme.sh ./acme.sh --install -m my@example.comACME_2021-10-15_123100.png返回目錄內容VPN 利用 VPN 可以簡單部署及測試 VPC ，就像內網機器使用一樣。ZeroTierZeroTier 結合了 VPN 和 SD-WAN 的功能，簡化了網路管理。我在使用功能ZeroTier 實現遠端訪問局域網，因為好多大佬編譯OpenWRT已經build-in ZeroTIer軟件，在設定和使用上變得簡單。TailscaleZerotier 和 TailSale 非常類似，我使用 TailSale 主要是透過Zerotier 訪問內網段20.13.3.0/24 失效，誤判為外網網段而不能訪問。而使用 TailSale 的設定可以實現遠端訪問網段為 20.13.3.0/24 的局域網。我使用 TailSale 的功能和設定，TailScale 實現遠端訪問整段局域網 (ZeroTier 另一選擇)、TailScale 實現「出口節點」"Exit Node"（導向所有流量經這出口節點）返回目錄內容Rclone Rclone 是一個命令行程式，用於管理雲存儲上的檔。主要是定期備份 VPC 的內容到雲端上。RCLONE_2022-01-26_105552.png備份腳本配置: (參考鳥哥的每週系統備份的 script)#!/bin/bash # ========================================================= # Source Folder BaseDir=/home/opc/backup/ Weekly=/home/opc/backup/Weekly # ========================================================= PATH=/bin:/usr/bin:/sbin:/usr/sbin; export PATH export LANG=C # 判斷目錄是否存在，若不存在則予以建立。 for dirs in $BaseDir $Weekly do [ ! -d "$dirs" ] && mkdir -p $dirs done # Stop the Docker-Compose cd /home/opc/apps/dnmp docker-compose stop # Differential Backup (DNMP) cd /home/opc/apps tar -N '2021-12-25' -czv -f $Weekly/dnmp.$(date +%Y-%m-%d).tar.gz dnmp # Start the Docker-Compose cd /home/opc/apps/dnmp docker-compose up -d # Sychonizztion OPC Apps to Cloud(LWCPS) Folder rclone sync --progress $BaseDir LWCPS:/Cloud/OPC/Apps # Delete Files older Than 180 Days find $Weekly/* -mtime +180 -exec rm {} \;加入到排程 crontab30 2 * * 1 "/home/opc/script/sync.sh" > /dev/null返回目錄內容結語: VPC可以實現功能是太過豐富，我所使用的只是冰山一角。如可實現安裝路由器功能，代理軟件供404區以外用戶翻過來等等。
TailScale 實現「出口節點」"Exit Node"（導向所有流量經這出口節點）
TailScale 實現「出口節點」"Exit Node"（導向所有流量經這出口節點）Non.Exit.Node.pngExit.Node.png前言:當你使用公共網絡時，如在咖啡廰的WI-FI、酒店的網絡、或者釣魚WI-FI(不信任的網絡)等地方訪問家裡的設備、銀行服務或者公司的伺服器，很可能內容會給中間人截聽。然而TailScale 實現「出口節點」"Exit Node"功能，在加密(基於WireGuard)的TailScale 網絡內導向所有流量經「出口節點」訪問，從而避免敏感資料給有心人收穫取。目錄內容:部署「出口節點」Exit Node客戶端使用「出口節點」Windows 客戶端Android 客戶端Linux 客戶端1. 部署「出口節點」"Exit Node" 「出口節點」Exit Node暫時只支持在Linux系統的設備，這範例中以CentOS7平台部署「出口節點」。安裝倉庫管理軟件TS_Nodes_Server_091936.pngsudo yum install yum-utils添加Tailscale 倉庫地址TS_Nodes_Server_091951.pngsudo yum-config-manager --add-repo https://pkgs.tailscale.com/stable/centos/7/tailscale.repo安裝TailscaleTS_Nodes_Server_092030.pngsudo yum install tailscale -y啟用Tailscale 服務TS_Nodes_Server_092058.pngsudo systemctl enable --now tailscaled驗證及接入到Tailscale 網絡sudo tailscale upTS_Nodes_Server_092146.pngTS_Nodes_Server_092152.png此頁面顯示成功授權返回CentOS7終端查看分配到的IP地址TS_Nodes_Server_092222.pngtailscale ip啟用 CentOS7上的 IP 轉發(IP Forwarding)「出口節點」的設定需要用到 IP 轉發(IP Forwarding)特性TS_Nodes_Server_092518.pngecho 'net.ipv4.ip_forward = 1' | sudo tee -a /etc/sysctl.conf echo 'net.ipv6.conf.all.forwarding = 1' | sudo tee -a /etc/sysctl.conf sudo sysctl -p /etc/sysctl.conf發佈此裝置為「出口節點」Exit NodeTS_Nodes_Server_092621.pngsudo tailscale up --advertise-exit-node網頁控制台管理節點需要允許將此設備為「出口節點」Exit Node。登入到網頁控制台管理頁面的 > MachinesTS_Nodes_Server_092633.png圖示為未允許將此設備為「出口節點」Exit NodeTS_Nodes_Server_092647.pngTS_Nodes_Server_092717.png啟用Use as Exit nodeTS_Nodes_Server_092730.png圖示已經允許將此設備為「出口節點」Exit Node停用「密鑰過期」功能基於安全特性，Tailscale每隔6個月需要重新授權裝置，作為「出口節點」Exit Node，建議停用，以防止定期重新驗證。TS_Nodes_Server_092745.pngTS_Nodes_Server_092753.png2. 客戶端使用「出口節點」 使用這個功能，TailScale的軟件版本不能低於1.6。Windows 客戶端使用「出口節點」TS_Nodes_Windows_092824.png未使用「出口節點」的公網IP地址為221.126.xxx.xxxTS_Nodes_Windows_092905.pngTS_Nodes_Windows_094319.png使用「出口節點」的公網IP地址為146.56.xxx.xxxTS_Nodes_Windows_094832.png出口的網速Android 客戶端使用「出口節點」TS_Nodes_Andorid_20211008102710 (Small).jpg未使用「出口節點」的公網IP地址為221.126.xxx.xxxTS_Nodes_Andorid_20211008102810 (Small).jpgTS_Nodes_Andorid_20211008102835 (Small).jpgTS_Nodes_Andorid_20211008102836 (Small).jpgTS_Nodes_Andorid_20211008102904 (Small).jpgTS_Nodes_Andorid_20211008102915 (Small).jpg使用「出口節點」的公網IP地址為146.56.xxx.xxxLinux 客戶端使用「出口節點」sudo tailscale up --exit-node=100.100.57.95其中100.100.57.95 為「出口節點」的 TailScale IP 地址`測速TS_Nodes_Linux_095542.png結語:如果內網的網絡限制而不能訪問某404區，基於導向所有流量經出口節點特性，應該可以跨越。(前提是「出口節點」Exit Node的地理位置要適中)參考資料:Download Install the app and sign in to get started TailscaleEnable IP forwarding on Linux · TailscaleExit Nodes (route all traffic)
TailScale 實現遠端訪問整段局域網(ZeroTier另一選擇)home-network-after.png前言:之前的貼文分享了ZeroTier 實現遠端訪問局域網 ，最近發現一款軟件TailScale感覺設定上更簡單一點，僅僅透過帳號登入就可以接入TailScale網絡內。TailScale是以Wireguard的協議加密，所以安全性更高，而且是P2P連線，流量不經伺服器，延遲更低、私密性更高。目錄內容:安裝及加入到TailScale網絡透過設定其中1部TailScale的裝置為網關「Subnet Router」，可以訪問整個內網網段1. 安裝及加入到「TailScale」網絡 如果是Windows用戶可以到官網下載安裝Tailscale，或者透過Chocolatey軟件包安裝。TailScale_Windows_191122.pngchoco install tailscale -yTailScale_Windows_191751.png雙擊桌面右下角的圖示TailScale_Windows_193350.png使用谷歌或者微軟賬號進行登錄TailScale_Windows_193352.png成功授權後可以查看分配到的IP地址Linux用戶可以到Download · Tailscale找到相對應的CPU平台及架構安裝.我以Ubuntu 20.04為範例TailScale_Linux__192028.png添加 Tailscale 的金鑰和軟件倉庫地址curl -fsSL https://pkgs.tailscale.com/stable/ubuntu/focal.gpg | sudo apt-key add - curl -fsSL https://pkgs.tailscale.com/stable/ubuntu/focal.list | sudo tee /etc/apt/sources.list.d/tailscale.list安裝Tailscalesudo apt update sudo apt install tailscale啟用Tailscale 及透過網址驗證登入到Tailscale 網絡sudo tailscale upTailScale_Linux__192029.pngTailScale_Linux_121648.png此頁面顯示成功授權返回到Linux 終端查看分配到的IP地址tailscale ipTailScale_Linux_141410.pngTailScale_Linux_141412.pngTailscale 網絡內的裝置可以互通2. 透過設定其中1部「TailScale」的裝置為網關「Subnet Router」，可以訪問整個內網網段 因為不是每一部設備都可以安裝到Tailscale ， 所以這樣設定「Subnet Route」的好處是家裡內網只要1部Linux裝置接入到Tailscale 網絡，其他所有的外網的Tailscale裝置都可以透過這部Linux裝置作為網關訪問家裡內網所有的設備，如: 印表機，路由器，伺服器等等。設定步驟:啟用 Linux 上的 IP 轉發(IP Forwarding)因為「Subnet Route」的設定需要用到 IP 轉發(IP Forwarding)特性使用以下指命啟用TailScale_Linux_141415.pngecho 'net.ipv4.ip_forward = 1' | sudo tee -a /etc/sysctl.conf echo 'net.ipv6.conf.all.forwarding = 1' | sudo tee -a /etc/sysctl.conf sudo sysctl -p /etc/sysctl.conf以Linux作為「Subnet Route」(子網路由網關)連接到TailscaleTailscale 不需要防火牆配置，會自動管理規則，以允許轉發。設定過程也沒涉及到iptable，一條指令可以完成。sudo tailscale up --advertise-routes=20.13.3.0/2420.13.3.0/24替換為自己的網段，可以是IPV4或者IPV6。登入到網頁控制台 > MachinesTailScale_Linux_141447.pngTailScale_Linux_141448.pngTailScale_Linux_141457.pngEnable All允許轉發所有TailScale_Linux_141502.pngTailScale_Linux_150236.pngTailScale_Linux_150237.png基於安全特性，Tailscale每隔6個月需要重新授權裝置，作為「Subnet Router」(子網路由網關)，建議停用。外網的Tailscale裝置線路測試TailScale_Windows_150033.jpg可以看到是經節點「Subnet Router」IP 100.101.41.50 接入到內網 20.13.3.1，延遲也很理想。以下是使用內網IP連入家裡的各服務及裝置TailScale_Windows_150753.jpgTailScale_Windows_150758.pngTailScale_Windows_150800.pngTailScale_Windows_150802.jpgTailScale_Windows_150804.pngTailScale_Windows_150806.png測速TailScale_Windows_150808.png結語:TailSale和ZeroTier的使用場景上非常相近，沒有那個占優，根據自身網絡環境的連線質量較佳去選取。透過ZeroTier 實現遠端訪問局域網的設定不是對所有自定網段有效，如今次的20.13.3.0/24的網段失效，Zerotier誤判為外網網段而不能訪問。而使用TailSale的設定可以實現遠端訪問網段為20.13.3.0/24的局域網。參考資料:Download Install the app and sign in to get started TailscaleEnable IP forwarding on Linux · TailscaleSubnet routers and traffic relay nodes · Tailscale