CentOS8部署zerotier異地組網

zbyisgudi發表於2024-07-04

CentOS8部署zerotier異地組網

CentOS8部署zerotier異地組網

一、前言

本文在此前研究部署FRP進行內網穿透,但FRP是基於公網伺服器的流量轉發,上下行的速率取決於公網伺服器的頻寬,並且每啟用一個服務都需要開放伺服器的一個埠,在易用性和安全性上都有著一定的問題。
為解決內網穿透需求,瞭解到zerotier這個工具,可以實現異地組網的功能。
在zerotier中,每一臺裝置都是一個客戶端,客戶端之間透過p2p連線。每臺裝置上安裝一個虛擬網路卡,實現虛擬區域網,這樣處於公網中的機器也能夠像在區域網中一樣互相訪問。

二、部署

  1. 安裝zerotier
    Linux端的一鍵安裝命令:
    curl -s https://install.zerotier.com | sudo bash
    此外,解除安裝命令:

    dpkg -P zerotier-one
    rm -rf /var/lib/zerotier-one/
    
  2. 開啟zerotier
    zerotier-one -d
    若出現

    zerotier-one: fatal error: cannot bind to local control interface port 9993

    則說明埠9993被佔用,接下來檢視埠占用資訊。
    netstat -lp | grep 9993
    若是自己佔用了,那麼結束其程序:
    killall -9 zerotier-one
    反覆執行,直到出現提示程序已全都結束。
    若提示無killall,安裝:
    yum install psmisc
    再次啟動zerotier。
    若zerotier還是不能啟動,則開啟zerotier開機自啟:
    systemctl enable zerotier-one.service
    再次重啟。

  3. zerotier加入網路
    zerotier-cli join 需要加入的網路ID
    當出現200 join OK時,說明加入成功。

  4. 開啟IP轉發
    編輯/etc/sysctl.conf檔案
    輸入一下兩行配置開啟IP轉發:

    net.ipv4.ip_forward=1
    net.ipv6.conf.all.forwarding=1
    

    解釋:
    net.ipv4.ip_forwardnet.ipv6.conf.all.forwarding選項同理)該選項設定為 1 時,表示啟用了IP轉發功能。IP轉發是指網路裝置在接收到一個IP資料包後,根據目標IP地址對該資料包進行決策,並選擇合適的網路介面將其轉發出去。
    當配置的值為 1 時,系統將啟用IP轉發功能,允許將網路流量從一個介面轉發到另一個介面,使得不同網路之間能夠進行路由通訊。這在充當網路路由器或防火牆的系統中非常常見。
    然而,需要注意的是,啟用IP轉發功能可能會對系統的安全性產生影響。因此,在應用中啟用此功能之前,應仔細評估網路安全風險,並採取適當的安全措施來保護系統和網路。
    請謹慎使用IP轉發功能並確保採取了適當的網路安全措施。

  5. zerotier配置路由表
    如圖所示,格式為:
    內網網段 via 跳板機所分配地址

zerotier路由表.png

  1. 跳板機設定路由表
    輸入ip addr
    記錄下連線區域網的物理網路卡和zerotier的虛擬網路卡(一般以zt開頭)
    將網路卡名稱匯出為環境變數名:

    PHY_IFACE=物理網路卡名稱
    ZT_IFACE=zerotier的虛擬網路卡名稱
    

    更新路由表:

    iptables -t nat -A POSTROUTING -o $PHY_IFACE -j MASQUERADE  
    iptables -A FORWARD -i $PHY_IFACE -o $ZT_IFACE -m state --state RELATED,ESTABLISHED -j ACCEPT  
    iptables -A FORWARD -i $ZT_IFACE -o $PHY_IFACE -j ACCEPT  
    iptables-save  
    

    持久化路由表:

    mkdir -p /etc/sysconfig/  
    sh -c "iptables-save > /etc/sysconfig/iptables"  
    

    /etc/rc.local檔案最後新增一行:

    vi /etc/rc.local  
    /sbin/iptables-restore < /etc/sysconfig/iptables  
    

    理論上在經過上述設定後開啟zerotier則可以實現在公網透過跳板機訪問區域網內裝置,但在本文實踐後發現只能訪問跳板機的區域網內IP地址,並不能訪問其餘區域網內裝置。不知是跳板機的路由表設定還是zerotier的路由表設定或是區域網內裝置防火牆問題,需要進一步排查。

  2. 後續
    至此已經基本能夠透過zerotier實現公內網下無縫訪問單一裝置,已經基本滿足本文此前的需求,但還是沒有實現公網無縫組網的功能。

三、展望

  1. 透過區域網內跳板機設定IP轉發訪問其他區域網內裝置。
  2. 基於openwrt的軟路由安裝zerotier新增異地區域網實現組網。

參考

  1. 部署zerotier客戶端(Linux版本)適用於CentOS、Ubuntu等系統
  2. ZeroTier 異地組網
  3. 異地旁路組網:zerotier

相關文章