weron - weronは、WebRTCに基づく無駄のない高速で安全なオーバーレイネットワークを提供します。

(Overlay networks based on WebRTC.)

Created at: 2022-03-01 04:58:50
Language: Go
License: AGPL-3.0

ウェロン

ロゴ

WebRTCに基づくオーバーレイネットワーク。

⚠️weronはまだ監査されていません!weronは可能な限り安全にするよう努めていますが、第三者による正式なセキュリティ監査はまだ受けていません。セキュリティが重要なアプリケーションに使用する場合は、このことに注意してください。⚠️

hydrun CI Docker CI 参照に移動 マトリックス バイナリダウンロード

概要

weronは、WebRTCに基づく無駄のない高速で安全なオーバーレイネットワークを提供します。

それもあなたを可能にします...

  • NATの背後にあるノードへのアクセス:weronはWebRTCを使用してノード間の接続を確立するため、STUNを使用して企業のファイアウォールやNATを簡単に通過したり、TURNサーバーを使用してトラフィックをトンネリングしたりできます。これは、ルーターのポートを転送せずに、たとえばホームラボにSSHで接続する場合に非常に便利です。
  • ホームネットワークの保護:低遅延ネットワークではWebRTCのオーバーヘッドが比較的低いため、weronを使用すると、パフォーマンスに大きな影響を与えることなく、LAN内のノード間のトラフィックを保護できます。
  • ローカルノードをクラウドネットワークに参加させる:たとえば、クラウドインスタンスに基づくノードでKubernetesクラスターを実行しているが、オンプレミスノードをそれに参加させたい場合は、weronを使用して信頼できるネットワークを作成できます。
  • 検閲のバイパス:Zoom、Teams、Meetなどの人気のあるビデオ会議ツールが構築されている基盤となるWebRTCスイートは、ネットワークレベルでブロックするのが難しいため、州や企業の検閲をバイパスするためのツールボックスへの貴重な追加となります。
  • 独自のピアツーピアプロトコルを作成する:シンプルなAPIにより、自動再接続、複数のデータチャネルなどを備えた分散アプリケーションの作成が簡単になります。

インストール

コンテナ化

次のようにOCIイメージを取得できます。

$ podman pull ghcr.io/pojntfx/weron

ネイティブ

静的バイナリはGitHubリリースで利用できます。

Linuxでは、次のようにインストールできます。

$ curl -L -o /tmp/weron "https://github.com/pojntfx/weron/releases/latest/download/weron.linux-$(uname -m)"
$ sudo install /tmp/weron /usr/local/bin
$ sudo setcap cap_net_admin+ep /usr/local/bin/weron # This allows rootless execution

macOSでは、次を使用できます。

$ curl -L -o /tmp/weron "https://github.com/pojntfx/weron/releases/latest/download/weron.darwin-$(uname -m)"
$ sudo install /tmp/weron /usr/local/bin

Windowsでは、以下が機能するはずです(PowerShellを管理者として使用)。

PS> Invoke-WebRequest https://github.com/pojntfx/weron/releases/latest/download/weron.windows-x86_64.exe -OutFile \Windows\System32\weron.exe

GitHubリリースで、より多くのオペレーティングシステムとアーキテクチャのバイナリを見つけることができます。

使用法

TL; DR:ホストされたシグナリングサーバー上のレイヤー3(IP)オーバーレイネットワークに参加し

sudo weron vpn ip --community mycommunity --password mypassword --key mykey --ips 2001:db8::1/32,192.0.2.1/24
、レイヤー2(イーサネット)オーバーレイネットワークに参加します。
sudo weron vpn ethernet --community mycommunity --password mypassword --key mykey

1.でシグナリングサーバーを起動します
weron signaler

シグナリングサーバーは、ピア間で接続情報を交換することにより、ピアを相互に接続します。また

--password
、クライアントのフラグを介してコミュニティへのアクセスを管理し、すべてのピアが切断された後でも永続的なコミュニティを維持できます。

--key
でホストされているシグナリングサーバーを使用することは可能であり、(TLSに加えて、接続情報はクライアントのフラグを使用して暗号化されます)合理的にプライベートですが、サーバーを
wss://weron.herokuapp.com/
自分でホストすることには、待ち時間の短縮やプライバシーの向上など、多くの利点があります。

シグナリングサーバーは、インメモリデータベースまたはRedisとPostgreSQLを備えたインプロセスブローカーを使用できます。本番環境で使用する場合は、後者の構成を強くお勧めします。これにより、シグナリングサーバーを水平方向に簡単に拡張できます。これは、サーバーインフラストラクチャを複数の大陸にまたがって拡張する場合に特に重要です。これは、クラウド内バックボーンは通常、常駐接続よりもレイテンシが低く、ピアを相互に接続するために必要な時間を短縮するためです。

コンテナ化された指示を展開する
$ sudo podman network create weron

$ sudo podman run -d --restart=always --label "io.containers.autoupdate=image" --name weron-postgres --network weron -e POSTGRES_HOST_AUTH_METHOD=trust -e POSTGRES_DB=weron_communities postgres
$ sudo podman generate systemd --new weron-postgres | sudo tee /lib/systemd/system/weron-postgres.service

$ sudo podman run -d --restart=always --label "io.containers.autoupdate=image" --name weron-redis --network weron redis
$ sudo podman generate systemd --new weron-redis | sudo tee /lib/systemd/system/weron-redis.service

$ sudo podman run -d --restart=always --label "io.containers.autoupdate=image" --name weron-signaler --network weron -p 1337:1337 -e DATABASE_URL='postgres://[email protected]:5432/weron_communities?sslmode=disable' -e REDIS_URL='redis://weron-redis:6379/1' -e API_PASSWORD='myapipassword' ghcr.io/pojntfx/weron:unstable weron signaler
$ sudo podman generate systemd --new weron-signaler | sudo tee /lib/systemd/system/weron-signaler.service

$ sudo systemctl daemon-reload

$ sudo systemctl enable --now weron-postgres
$ sudo systemctl enable --now weron-redis
$ sudo systemctl enable --now weron-signaler

$ sudo firewall-cmd --permanent --add-port=1337/tcp
$ sudo firewall-cmd --reload
ネイティブ命令を展開する
sudo podman run -d --restart=always --label "io.containers.autoupdate=image" --name weron-postgres -e POSTGRES_HOST_AUTH_METHOD=trust -e POSTGRES_DB=weron_communities -p 127.0.0.1:5432:5432 postgres
sudo podman generate systemd --new weron-postgres | sudo tee /lib/systemd/system/weron-postgres.service

sudo podman run -d --restart=always --label "io.containers.autoupdate=image" --name weron-redis -p 127.0.0.1:6379:6379 redis
sudo podman generate systemd --new weron-redis | sudo tee /lib/systemd/system/weron-redis.service

sudo tee /etc/systemd/system/weron-signaler.service<<'EOT'
[Unit]
Description=weron Signaling Server
After=weron-postgres.service weron-redis.service

[Service]
ExecStart=/usr/local/bin/weron signaler --verbose=7
Environment="DATABASE_URL=postgres://[email protected]:5432/weron_communities?sslmode=disable"
Environment="REDIS_URL=redis://localhost:6379/1"
Environment="API_PASSWORD=myapipassword"

[Install]
WantedBy=multi-user.target
EOT

sudo systemctl daemon-reload

sudo systemctl restart weron-postgres
sudo systemctl restart weron-redis
sudo systemctl restart weron-signaler

sudo firewall-cmd --permanent --add-port=1337/tcp
sudo firewall-cmd --reload

これで、に到達できるはず

ws://localhost:1337/
です。

本番環境で使用するには、このシグナリングサーバーをCaddyTraefikなどのTLS対応のリバースプロキシの背後に配置します。

API_PASSWORD
空のままにして管理APIを完全に無効にするか、代わりにOpenIDConnectを使用して認証することもできます。詳細については、シグナリングサーバーリファレンスを参照してください。Go APIを使用して、独自のアプリケーションにシグナリングサーバーを埋め込むこともできます。

2.コミュニティを管理する
weron manager

いかなる種類の許可もなしにシグナリングサーバー上に外部コミュニティを作成することは可能ですが、ほとんどのアプリケーションに対して永続的なコミュニティを作成することをお勧めします。クライアントが参加または離脱すると、外部コミュニティが自動的に作成および削除されます。永続コミュニティが自動的に削除されることはありません。これらのコミュニティは、マネージャーCLIを使用して管理できます。

セルフホストのシグナリングサーバーで作業する場合は、最初にリモートアドレスを設定します。

$ export WERON_RADDR='http://localhost:1337/'

次に、

API_PASSWORD
env変数を使用してAPIパスワードを設定します。

$ export API_PASSWORD='myapipassword'

OIDCを使用して認証する場合は、代わりに次のようにgoitを使用してAPIパスワードを設定できます。

$ export OIDC_CLIENT_ID='Ab7OLrQibhXUzKHGWYDFieLa2KqZmFzb' OIDC_ISSUER='https://pojntfx.eu.auth0.com/' OIDC_REDIRECT_URL='http://localhost:11337'
$ export API_KEY="$(goit)"

ここでコミュニティを一覧表示すると、現在コミュニティが存在しないことがわかります。

$ weron manager list
id,clients,persistent

以下を使用して永続的なコミュニティを作成できます

weron create

$ weron manager create --community mycommunity --password mypassword
id,clients,persistent
mycommunity,0,true

を使用してコミュニティを削除することもできます。これにより

weron delete
、参加しているすべてのピアが切断されます。

$ weron manager delete --community mycommunity

詳細については、マネージャーリファレンスを参照してください。Go APIを使用して、独自のアプリケーションにマネージャーを埋め込むこともできます。

3.でシステムをテストします
weron chat

セルフホストのシグナリングサーバーで作業する場合は、最初にリモートアドレスを設定します。

$ export WERON_RADDR='ws://localhost:1337/'

チャットは、すべてが正しく機能しているかどうかをテストする簡単な方法です。チャットルームに参加するには、次のコマンドを実行します。

$ weron chat --community mycommunity --password mypassword --key mykey --names user1,user2,user3 --channels one,two,three

別のピアで、次を実行します(シグナリングサーバーがパブリックの場合、これは地球上のどこでも実行できます)。

$ weron chat --community mycommunity --password mypassword --key mykey --names user1,user2,user3 --channels one,two,three
.wss://weron.herokuapp.com/
user2!
[email protected]
[email protected]
[email protected]
user2>

これで、メッセージの送受信を開始したり、チャットルームに新しいピアを追加してネットワークをテストしたりできます。

詳細については、チャットリファレンスを参照してください。Go APIを使用して、チャットを独自のアプリケーションに埋め込むこともできます。

4.レイテンシを測定する
weron utility latency

ネットワークの洞察に満ちたメトリックは、このユーティリティで測定できる遅延です。これをと考えて

ping
ください。ただし、WebRTCの場合です。まず、次のようにレイテンシ測定サーバーを起動します。

$ weron utility latency --community mycommunity --password mypassword --key mykey --server

別のピアで、クライアントを起動します。クライアントは、すぐに遅延の測定を開始する必要があります。を押しCTRL Cて停止し、合計統計を取得します。

$ weron utility latency --community mycommunity --password mypassword --key mykey
# ...
128 B written and acknowledged in 110.111µs
128 B written and acknowledged in 386.12µs
128 B written and acknowledged in 310.458µs
128 B written and acknowledged in 335.341µs
128 B written and acknowledged in 264.149µs
^CAverage latency: 281.235µs (5 packets written) Min: 110.111µs Max: 386.12µs

詳細については、レイテンシ測定ユーティリティリファレンスを参照してください。Go APIを使用して、独自のアプリケーションにユーティリティを埋め込むこともできます。

5.スループットを測定する
weron utility throughput

大量のデータを転送する場合は、ネットワークのスループットが重要な特性です。このユーティリティを使用すると、2つのノード間でこのメトリックを測定できます。と考えて

iperf
ください。ただし、WebRTCの場合です。まず、次のようにスループット測定サーバーを起動します。

$ weron utility throughput --community mycommunity --password mypassword --key mykey --server

別のピアで、クライアントを起動します。クライアントは、スループットの測定をすぐに開始する必要があります。を押しCTRL Cて停止し、合計統計を取得します。

$ weron utility throughput --community mycommunity --password mypassword --key mykey
# ...
97.907 MB/s (783.253 Mb/s) (50 MB read in 510.690403ms)
64.844 MB/s (518.755 Mb/s) (50 MB read in 771.076908ms)
103.360 MB/s (826.881 Mb/s) (50 MB read in 483.745832ms)
89.335 MB/s (714.678 Mb/s) (50 MB read in 559.692495ms)
85.582 MB/s (684.657 Mb/s) (50 MB read in 584.233931ms)
^CAverage throughput: 74.295 MB/s (594.359 Mb/s) (250 MB written in 3.364971672s) Min: 64.844 MB/s Max: 103.360 MB/s

詳細については、スループット測定ユーティリティリファレンスを参照してください。Go APIを使用して、独自のアプリケーションにユーティリティを埋め込むこともできます。

6.でレイヤー3(IP)オーバーレイネットワークを作成します
weron vpn ip

複数のノードをオーバーレイネットワークに参加させる場合は、IPVPNが最適です。これは、Tailscale / WireGuardと同じように機能し、CIDR表記からIPアドレスを動的に割り当てるか、静的に割り当てることができます。Windowsでは、必ず最初にTAP-Windowsをインストールしてください。開始するには、最初のピアでVPNを起動します。

$ sudo weron vpn ip --community mycommunity --password mypassword --key mykey --ips 2001:db8::1/64,192.0.2.1/24
{"level":"info","addr":"wss://weron.herokuapp.com/","time":"2022-05-06T22:20:51+02:00","message":"Connecting to signaler"}
{"level":"info","id":"[\"2001:db8::6a/64\",\"192.0.2.107/24\"]","time":"2022-05-06T22:20:56+02:00","message":"Connected to signaler"}

別のピアで、VPNも起動します。

$ sudo weron vpn ip --community mycommunity --password mypassword --key mykey --ips 2001:db8::1/64,192.0.2.1/24
{"level":"info","addr":"wss://weron.herokuapp.com/","time":"2022-05-06T22:22:30+02:00","message":"Connecting to signaler"}
{"level":"info","id":"[\"2001:db8::b9/64\",\"192.0.2.186/24\"]","time":"2022-05-06T22:22:36+02:00","message":"Connected to signaler"}
{"level":"info","id":"[\"2001:db8::6a/64\",\"192.0.2.107/24\"]","time":"2022-05-06T22:22:36+02:00","message":"Connected to peer"}

これで、ピア間で通信できます。

$ ping 2001:db8::b9
PING 2001:db8::b9(2001:db8::b9) 56 data bytes
64 bytes from 2001:db8::b9: icmp_seq=1 ttl=64 time=1.07 ms
64 bytes from 2001:db8::b9: icmp_seq=2 ttl=64 time=1.36 ms
64 bytes from 2001:db8::b9: icmp_seq=3 ttl=64 time=1.20 ms
64 bytes from 2001:db8::b9: icmp_seq=4 ttl=64 time=1.10 ms
^C
--- 2001:db8::b9 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3002ms
rtt min/avg/max/mdev = 1.066/1.180/1.361/0.114 ms

ネットワーク接続を一時的に失うと、ネットワークトポロジが変更されるなど、自動的に再接続されます。macOSなどの独自のオペレーティングシステムの詳細と制限については、IPVPNリファレンスを参照してください。Go APIを使用して、独自のアプリケーションにユーティリティを埋め込むこともできます。

7.レイヤー2(イーサネット)オーバーレイネットワークを作成する
weron vpn ethernet

より柔軟性が必要な場合、または非IPネットワークで作業する場合は、イーサネットVPNが適しています。

n2n
またはZeroTierと同じように機能します。APIの制限により、このVPNタイプはmacOSでは使用できません代わりに、自由を尊重するコンピューターであるAsahi Linuxまたはレイヤー3(IP)VPNを使用してください。開始するには、最初のピアでVPNを起動します。

$ sudo weron vpn ethernet --community mycommunity --password mypassword --key mykey
{"level":"info","addr":"wss://weron.herokuapp.com/","time":"2022-05-06T22:42:10+02:00","message":"Connecting to signaler"}
{"level":"info","id":"fe:60:a5:8b:81:36","time":"2022-05-06T22:42:11+02:00","message":"Connected to signaler"}

TAPインターフェイスにIPアドレスを追加する場合は、

iproute2
またはOSツールを使用して追加します。

$ sudo ip addr add 192.0.2.1/24 dev tap0
$ sudo ip addr add 2001:db8::1/32 dev tap0

別のピアで、VPNも起動します。

$ sudo weron vpn ethernet --community mycommunity --password mypassword --key mykey
{"level":"info","addr":"wss://weron.herokuapp.com/","time":"2022-05-06T22:52:56+02:00","message":"Connecting to signaler"}
{"level":"info","id":"b2:ac:ae:b6:32:8c","time":"2022-05-06T22:52:57+02:00","message":"Connected to signaler"}
{"level":"info","id":"fe:60:a5:8b:81:36","time":"2022-05-06T22:52:57+02:00","message":"Connected to peer"}

そして、IPアドレスを追加します。

$ sudo ip addr add 192.0.2.2/24 dev tap0
$ sudo ip addr add 2001:db8::2/32 dev tap0

これで、ピア間で通信できます。

$ ping 2001:db8::2
PING 2001:db8::2(2001:db8::2) 56 data bytes
64 bytes from 2001:db8::2: icmp_seq=1 ttl=64 time=1.20 ms
64 bytes from 2001:db8::2: icmp_seq=2 ttl=64 time=1.14 ms
64 bytes from 2001:db8::2: icmp_seq=3 ttl=64 time=1.24 ms
^C
--- 2001:db8::2 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2002ms
rtt min/avg/max/mdev = 1.136/1.193/1.239/0.042 ms

ネットワーク接続を一時的に失うと、ネットワークトポロジが変更されるなど、自動的に再接続されます。Go APIを使用して、独自のアプリケーションにユーティリティを埋め込むこともできます。

8.で独自のプロトコルを作成します
wrtcconn

PeerJSの動作と同様に、weronを使用して独自の分散アプリケーションを構築することはほとんど簡単です。簡単なエコーの例の背後にあるコアロジックは次のとおりです。

// ...
for {
	select {
	case id := <-ids:
		log.Println("Connected to signaler", id)
	case peer := <-adapter.Accept():
		log.Println("Connected to peer", peer.PeerID, "and channel", peer.ChannelID)

		go func() {
			defer func() {
				log.Println("Disconnected from peer", peer.PeerID, "and channel", peer.ChannelID)
			}()

			reader := bufio.NewScanner(peer.Conn)
			for reader.Scan() {
				log.Printf("%s", reader.Bytes())
			}
		}()

		go func() {
			for {
				if _, err := peer.Conn.Write([]byte("Hello!\n")); err != nil {
					return
				}

				time.Sleep(time.Second)
			}
		}()
	}
}

最小アダプターまたは名前付きアダプターのいずれかを使用できます。後者はピア間でユーザー名をネゴシエートしますが、前者は重複をチェックしません。詳細については、Go APIを確認し、パッケージ内の他のユーティリティとサービスの例を確認してください。

🚀 それでおしまい!weronをお楽しみください。

参照

コマンドライン引数

$ weron --help
Overlay networks based on WebRTC.

Find more information at:
https://github.com/pojntfx/weron

Usage:
  weron [command]

Available Commands:
  chat        Chat over the overlay network
  completion  Generate the autocompletion script for the specified shell
  help        Help about any command
  manager     Manage a signaling server
  signaler    Start a signaling server
  utility     Utilities for overlay networks
  vpn         Join virtual private networks built on overlay networks

Flags:
  -h, --help          help for weron
  -v, --verbose int   Verbosity level (0 is disabled, default is info, 7 is trace) (default 5)

Use "weron [command] --help" for more information about a command.
サブコマンドリファレンスを展開

シグナリングサーバー

$ weron signaler --help
Start a signaling server

Usage:
  weron signaler [flags]

Aliases:
  signaler, sgl, s

Flags:
      --api-password string     Password for the management API (can also be set using the API_PASSWORD env variable). Ignored if any of the OIDC parameters are set.
      --api-username string     Username for the management API (can also be set using the API_USERNAME env variable). Ignored if any of the OIDC parameters are set. (default "admin")
      --cleanup                 (Warning: Only enable this after stopping all other servers accessing the database!) Remove all ephermal communities from database and reset client counts before starting
      --ephermal-communities    Enable the creation of ephermal communities (default true)
      --heartbeat duration      Time to wait for heartbeats (default 10s)
  -h, --help                    help for signaler
      --laddr string            Listening address (can also be set using the PORT env variable) (default ":1337")
      --oidc-client-id string   OIDC Client ID (i.e. myoidcclientid) (can also be set using the OIDC_CLIENT_ID env variable)
      --oidc-issuer string      OIDC Issuer (i.e. https://pojntfx.eu.auth0.com/) (can also be set using the OIDC_ISSUER env variable)
      --postgres-url string     URL of PostgreSQL database to use (i.e. postgres://myuser:[email protected]:myport/mydatabase) (can also be set using the DATABASE_URL env variable). If empty, a in-memory database will be used.
      --redis-url string        URL of Redis database to use (i.e. redis://myuser:[email protected]:myport/1) (can also be set using the REDIS_URL env variable). If empty, a in-process broker will be used.

Global Flags:
  -v, --verbose int   Verbosity level (0 is disabled, default is info, 7 is trace) (default 5)

マネジャー

$ weron manager --help
Manage a signaling server

Usage:
  weron manager [command]

Aliases:
  manager, mgr, m

Available Commands:
  create      Create a persistent community
  delete      Delete a persistent or ephermal community
  list        List persistent and ephermal communities

Flags:
  -h, --help   help for manager

Global Flags:
  -v, --verbose int   Verbosity level (0 is disabled, default is info, 7 is trace) (default 5)

Use "weron manager [command] --help" for more information about a command.

チャット

$ weron chat --help
Chat over the overlay network

Usage:
  weron chat [flags]

Aliases:
  chat, cht, c

Flags:
      --channels strings    Comma-separated list of channels in community to join (default [weron/chat/primary])
      --community string    ID of community to join
      --force-relay         Force usage of TURN servers
  -h, --help                help for chat
      --ice strings         Comma-separated list of STUN servers (in format stun:host:port) and TURN servers to use (in format username:[email protected]:host:port) (i.e. username:[email protected]:global.turn.twilio.com:3478?transport=tcp) (default [stun:stun.l.google.com:19302])
      --id-channel string   Channel to use to negotiate names (default "weron/chat/id")
      --key string          Encryption key for community
      --kicks duration      Time to wait for kicks (default 5s)
      --names strings       Comma-separated list of names to try and claim one from
      --password string     Password for community
      --raddr string        Remote address (default "wss://weron.herokuapp.com/")
      --timeout duration    Time to wait for connections (default 10s)

Global Flags:
  -v, --verbose int   Verbosity level (0 is disabled, default is info, 7 is trace) (default 5)

レイテンシー測定ユーティリティ

$ weron utility latency --help
Measure the latency of the overlay network

Usage:
  weron utility latency [flags]

Aliases:
  latency, ltc, l

Flags:
      --community string    ID of community to join
      --force-relay         Force usage of TURN servers
  -h, --help                help for latency
      --ice strings         Comma-separated list of STUN servers (in format stun:host:port) and TURN servers to use (in format username:[email protected]:host:port) (i.e. username:[email protected]:global.turn.twilio.com:3478?transport=tcp) (default [stun:stun.l.google.com:19302])
      --key string          Encryption key for community
      --packet-length int   Size of packet to send and acknowledge (default 128)
      --password string     Password for community
      --pause duration      Time to wait before sending next packet (default 1s)
      --raddr string        Remote address (default "wss://weron.herokuapp.com/")
      --server              Act as a server
      --timeout duration    Time to wait for connections (default 10s)

Global Flags:
  -v, --verbose int   Verbosity level (0 is disabled, default is info, 7 is trace) (default 5)

スループット測定ユーティリティ

$ weron utility throughput --help
Measure the throughput of the overlay network

Usage:
  weron utility throughput [flags]

Aliases:
  throughput, thr, t

Flags:
      --community string    ID of community to join
      --force-relay         Force usage of TURN servers
  -h, --help                help for throughput
      --ice strings         Comma-separated list of STUN servers (in format stun:host:port) and TURN servers to use (in format username:[email protected]:host:port) (i.e. username:[email protected]:global.turn.twilio.com:3478?transport=tcp) (default [stun:stun.l.google.com:19302])
      --key string          Encryption key for community
      --packet-count int    Amount of packets to send before waiting for acknowledgement (default 1000)
      --packet-length int   Size of packet to send (default 50000)
      --password string     Password for community
      --raddr string        Remote address (default "wss://weron.herokuapp.com/")
      --server              Act as a server
      --timeout duration    Time to wait for connections (default 10s)

Global Flags:
  -v, --verbose int   Verbosity level (0 is disabled, default is info, 7 is trace) (default 5)

レイヤー3(IP)オーバーレイネットワーク

$ weron vpn ip --help
Join a layer 3 overlay network

Usage:
  weron vpn ip [flags]

Aliases:
  ip, i

Flags:
      --community string    ID of community to join
      --dev string          Name to give to the TAP device (i.e. weron0) (default is auto-generated; only supported on Linux, macOS and Windows)
      --force-relay         Force usage of TURN servers
  -h, --help                help for ip
      --ice strings         Comma-separated list of STUN servers (in format stun:host:port) and TURN servers to use (in format username:[email protected]:host:port) (i.e. username:[email protected]:global.turn.twilio.com:3478?transport=tcp) (default [stun:stun.l.google.com:19302])
      --id-channel string   Channel to use to negotiate names (default "weron/ip/id")
      --ips strings         Comma-separated list of IP networks to claim an IP address from and and give to the TUN device (i.e. 2001:db8::1/32,192.0.2.1/24) (on Windows, only one IPv4 and one IPv6 address are supported; on macOS, IPv4 addresses are ignored)
      --key string          Encryption key for community
      --kicks duration      Time to wait for kicks (default 5s)
      --max-retries int     Maximum amount of times to try and claim an IP address (default 200)
      --parallel int        Amount of threads to use to decode frames (default 8)
      --password string     Password for community
      --raddr string        Remote address (default "wss://weron.herokuapp.com/")
      --static              Try to claim the exact IPs specified in the --ips flag statically instead of selecting a random one from the specified network
      --timeout duration    Time to wait for connections (default 10s)

Global Flags:
  -v, --verbose int   Verbosity level (0 is disabled, default is info, 7 is trace) (default 5)

レイヤー2(イーサネット)オーバーレイネットワーク

$ weron vpn ethernet --help
Join a layer 2 overlay network

Usage:
  weron vpn ethernet [flags]

Aliases:
  ethernet, eth, e

Flags:
      --community string   ID of community to join
      --dev string         Name to give to the TAP device (i.e. weron0) (default is auto-generated; only supported on Linux, macOS and Windows)
      --force-relay        Force usage of TURN servers
  -h, --help               help for ethernet
      --ice strings        Comma-separated list of STUN servers (in format stun:host:port) and TURN servers to use (in format username:[email protected]:host:port) (i.e. username:[email protected]:global.turn.twilio.com:3478?transport=tcp) (default [stun:stun.l.google.com:19302])
      --key string         Encryption key for community
      --mac string         MAC address to give to the TAP device (i.e. 3a:f8:de:7b:ef:52) (default is auto-generated; only supported on Linux)
      --parallel int       Amount of threads to use to decode frames (default 8)
      --password string    Password for community
      --raddr string       Remote address (default "wss://weron.herokuapp.com/")
      --timeout duration   Time to wait for connections (default 10s)

Global Flags:
  -v, --verbose int   Verbosity level (0 is disabled, default is info, 7 is trace) (default 5)

環境変数

上記のすべてのコマンドライン引数は、環境変数を使用して設定することもできます。たとえば、環境変数で設定

--max-retries
するには、を使用します。
300
WERON_MAX_RETRIES=300

謝辞

  • songgao / waterは、weron用のTUN/TAPデバイスライブラリを提供します。
  • pion / webrtcは、WebRTC機能を提供します。
  • 使用された依存関係に取り組んだ残りのすべての作成者!どうもありがとう!

貢献

貢献するには、GitHubフローを使用し、行動規範に従ってください。

weronの開発バージョンをローカルでビルドして開始するには、次のコマンドを実行します。

$ git clone https://github.com/pojntfx/weron.git
$ cd weron
$ make depend
$ make && sudo make install
$ weron signal # Starts the signaling server
# In another terminal
$ weron chat --raddr ws://localhost:1337 --community mycommunity --password mypassword --key mykey --names user1,user2,user3 --channels one,two,three
# In another terminal
$ weron chat --raddr ws://localhost:1337 --community mycommunity --password mypassword --key mykey --names user1,user2,user3 --channels one,two,three

もちろん、このようなユーティリティやVPNに貢献することもできます。

質問があるか、助けが必要ですか?Matrixでチャットしてください!

ライセンス

weron(c)2022FelicitasPojtingerおよび寄稿者

SPDX-ライセンス-識別子:AGPL-3.0