EtherGuard-VPN/README_zh.md
2021-12-09 20:29:58 +00:00

4.2 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
        顯示版本

Mode

  1. Static 模式: 類似於原本的wireguard的模式。 詳細介紹
  2. Super 模式: 受到n2n的啟發寫的模式。 詳細介紹
  3. P2P 模式: 受到tinc的啟發寫的模式。 詳細介紹

Quick start

內建小工具可以快速生成設定檔搞定私鑰公鑰等等暫時只支援Super模式

首先按需求修改example_config/super_mode/gensuper.yaml

Config output dir: /tmp/eg_gen
ConfigTemplate for super node: ""
ConfigTemplate for edge node: ""
Network name: eg_net
Super Node:
  Listen port: 3456
  EdgeAPI prefix: /eg_net/eg_api
  Endpoint(IPv4)(optional): example.com
  Endpoint(IPv6)(optional): example.com
  Endpoint(EdgeAPI): http://example.com:3456/eg_net/eg_api
Edge Node:
  Node IDs: "[1~10,11,19,23,29,31,55~66,88~99]"
  MacAddress prefix: "" #留空隨機產生
  IPv4 range: 192.168.76.0/24
  IPv6 range: fd95:71cb:a3df:e586::/64
  IPv6 LL range: fe80::a3df:0/112

順帶一提最後三個欄位IP的部分可以直接省略沒關係
這個欄位唯一的目的只是在啟動以後調用ip命令幫tap接口加個ip
和VPN本身運作完全無關
VPN起來以後自己手動加ip也行

$ ./etherguard-go -mode gencfg -cfgmode super -config example_config/super_mode/gensuper.yaml

把一個super2個edge分別搬去三台機器
或是2台機器super和edge可以是同一台

然後在Supernode執行

./etherguard-go -config [設定檔位置] -mode super

然後在EdgeNode執行

./etherguard-go -config [設定檔位置] -mode edge

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