EtherGuard-VPN/README_zh.md
2022-02-27 00:44:27 +08:00

3.7 KiB
Raw Blame History

Etherguard

English | 中文

Contributor Covenant

一個從wireguard-go改來的Full Mesh Layer2 VPN.

OSPF能夠根據cost自動選路
但是實際上,我們偶爾會遇到去程/回程不對等的問題
之前我就在想,能不能根據單向延遲選路呢?
例如我有2條線路一條去程快一條回程快。就自動過去回來各自走快的?

所以我就想弄一個這種的VPN了任兩節點會測量單向延遲並且使用Floyd-Warshall演算法演算法找出任兩節點間的最佳路徑
來回都會是最佳的。有2條線路一條去程快一條回程快就會自動各走各的

擔心時鐘不同步,單向延遲測量不正確?
沒問題的,證明可以看這邊: https://www.kskb.eu.org/2021/08/rootless-routerpart-3-etherguard.html

Usage

Usage of ./etherguard-go-vpp:
  -bind string
        UDP socket bind mode. [linux|std]
        You may need this if tou want to run Etherguard under WSL. (default "linux")
  -cfgmode string
        cfgmode 快速生成設定檔的模式目前只實作了super模式 [none|super|p2p]
  -config string
        設定檔路徑
  -example
        印一個範例設定檔
  -help
        Show this help
  -mode string
        運作模式,有兩種運作模式 super/edge
        solve是用來解 Floyd Warshall的Static模式會用到
        gencfg則是快速生成設定檔
  -no-uapi
        不使用UAPI。使用UAPI你可以用wg命令看到一些連線資訊(畢竟是從wireguard-go改的)
  -version
        顯示版本

Working Mode

Mode Description
Static Mode 沒有自動選路,沒有握手伺服器
類似原本的wireguard一切都要提前配置好
詳細介紹
Super Mode 此模式是受到n2n的啟發分為SuperNode和EdgeNode兩種節點
EdgeNode首先和SuperNode建立連線藉由SuperNode交換其他EdgeNode的資訊
由SuperNode執行Floyd-Warshall演算法並把計算結果分發給EdgeNode
詳細介紹
P2P Mode 此模式是受到tinc的啟發只有EdgeNodeEdgeNode會彼交換資訊
EdgeNodes會嘗試互相連線並且通報其他EdgeNoses連線成功與否
每個Edge各自執行Floyd-Warshall演算法,若不能直達則使用最短路徑
此模式尚未經過長時間測試,尚不建議生產環境使用
詳細介紹

Quick start

Super模式快速上手請按我

Build

No-vpp version

編譯沒有VPP libmemif的版本。可以在一般linux電腦上使用

安裝 Go 1.16

add-apt-repository ppa:longsleep/golang-backports
apt-get -y update
apt-get install -y wireguard-tools golang-go build-essential git

Build

make

VPP version

編譯有VPP libmemif的版本。

用這個版本的話你的電腦要有libmemif.so才能run起來

安裝 VPP 和 libemif

echo "deb [trusted=yes] https://packagecloud.io/fdio/release/ubuntu focal main" > /etc/apt/sources.list.d/99fd.io.list
curl -L https://packagecloud.io/fdio/release/gpgkey | sudo apt-key add -
apt-get -y update
apt-get install -y vpp vpp-plugin-core python3-vpp-api vpp-dbg vpp-dev libmemif libmemif-dev

Build

make vpp