Giter VIP home page Giter VIP logo

webmesh's Introduction

Webmesh

Go Report Card Build and Tests Go Reference Sponsor

Webmesh is a simple, distributed, and zero-configuration WireGuard™ mesh solution for Linux, FreeBSD, macOS, and Windows. It allows for easily creating a mesh network between multiple hosts, and provides a simple API for managing the network. It is designed to be easy to use, and to work well with existing network infrastructure. For a more detailed introduction and extended documentation, please see the project website.

Webmesh is not a VPN, but rather a mesh network. It is designed to be used in conjunction with existing network infrastructure, and not as a replacement for it. It is also not a replacement for WireGuard™, but rather a way to manage a WireGuard™ mesh network. Connections are made into the network via direct links, over ICE (WebRTC) connections, or over LibP2P circuit relays. It differs from other WireGuard™ management solutions in that:

  • It is designed to be distributed and extensible, relying on no single controller or database.
  • The network is malleable and topology is governed by the user, not the controller.
  • A plugin API is provided for adding additional functionality, such as a distributed database for storing the mesh state or additional authentication mechanisms.
  • An application API is also provided for interacting with the mesh network, and is used by the CLI and GUI applications.

Getting Started

Install Webmesh

Detailed instructions can be found in the Getting Started guide on the project website. For examples of different topologies and the various features available, see the examples directory.

Developers

Integrating your project with Webmesh networks is easy. All APIs are written in protobuf in the API repository. Applications can integrate either via the webmeshd process or by embedding this package directly.

Libraries and other integrations are available for the following languages and environments:

More documentation on direct embedding will be provided later. For now, you can find examples in the examples/embedded directory. The godoc for the embed package is also a good place to start.

Building

The Makefile contains several targets for building the project. You can run make help to see all the available targets.

Roadmap

  • More storage provider implementations.
  • Potential SaaS offering for those who don't want to run their own controllers or have a simple off-site backup of the mesh state.

Most other functionality that is provided by other similar projects already exists in the kernel or in other projects. For example, NAT64 and DNS64 have several ways of being configured, but could still be seen as a potential common use-case. There is a question as to how many of those things should be "auto-configured" by a node and how much should be left up to the user.

Contributing

Contributions are welcome and encouraged. Please see the contributing docs for more information.

Community

Join me on Discord or in the webmesh channel on the Gophers Slack.

Special Thanks

The developers of rqlite for inspiration on managing a distributed database.

The incredible work done by the pion team for WebRTC in Go.

Legal

WireGuard is a registered trademark of Jason A. Donenfeld.

Support

Become a Github Sponsor.

webmesh's People

Contributors

tinyzimmer avatar therook avatar emmygozi avatar bbigras avatar

Stargazers

Willie Seabrook avatar Duncan McGregor avatar Ruixiao Dong avatar hzmi avatar Mike Grant avatar Sam Boysel avatar Ben avatar Valeriia Lapytska avatar Nikitas Skemvris avatar Naem avatar Daniil Stepanov avatar Wataru "Alt" Ohgai avatar Subhash Dasyam avatar Thomas Harr avatar Leo avatar  avatar  avatar San Hanityo avatar Per Guth avatar Daniel Poelzleithner avatar 爱可可-爱生活 avatar  avatar Jo M avatar pedoc avatar  avatar Lucy Sweet avatar izouxv avatar Damian avatar Daniel Tarazona avatar Andre Sa avatar gruebleen avatar Basant Besra avatar  avatar  avatar Marcin Wilk avatar Alireza Mirsepassi avatar MSTCL avatar Lutz Go avatar Ellie Schieder avatar Niranjan Anandkumar avatar Mohammad Shahgolzadeh avatar eplord avatar Alexey Aksenov avatar Murugappan Chetty avatar  avatar Christopher Adigun avatar Paul Basov avatar JWL avatar Colum avatar  avatar Steve Fan avatar Jackson Sabey avatar Vlad Bokov avatar Denis Subbotin avatar  avatar Oleg Pykhalov avatar angryPopcorn avatar Andrea avatar  avatar  avatar Barisi Kane avatar Jiachun Tao avatar  avatar Xiao chen avatar Kobzar Slava avatar  avatar  avatar velor2012 avatar  avatar  avatar Dale Dude avatar Bruno Bernard avatar  avatar rvgl avatar  avatar Noxcis avatar Rupert O'Halloran avatar minpeter avatar shanchui avatar Ede avatar  avatar  avatar Homing So avatar kawav avatar  avatar Marte Baquerizo avatar Nicolás Pace avatar Raymond Douglas avatar  avatar  avatar Alex Hunt avatar smantic avatar Karol Woźniak avatar Márk Bartos avatar dandan avatar nickersonm avatar Jan Hensel avatar  avatar phxa1 avatar Mohammad Nadeem avatar

Watchers

brian mullan avatar  avatar dannyhpy avatar  avatar  avatar  avatar Magnus Jurdal avatar

webmesh's Issues

Scripting Webmesh CLI

The Webmesh CLI syntax certainly seems designed in part for using scripts to Provision, Configure, Manage, etc Webmesh Nodes

I did some github & google searches to see if there was by chance anyone already creating or collecting such Webmesh Scripts

Found nothing, so I thought I'd ask here if such a repository/collection of Webmesh Scripts already exists somewhere?

thanks...

"snapshot restore progress" doesn't seem to progress

If I run this command, stop it and run it again:

  sudo webmesh-node \
       --global.detect-endpoints \
       --global.mtls \
       --global.tls-cert-file=/opt/webmesh/tls.crt \
       --global.tls-key-file=/opt/webmesh/tls.key \
       --global.tls-ca-file=/opt/webmesh/ca.crt \
       --bootstrap.enabled \
       --bootstrap.default-network-policy=accept \
       --wireguard.listen-port 51821 \
       --global.primary-endpoint 159.203.12.215 \
       --global.no-ipv6

I get:

{"time":"2023-08-08T16:00:51.644533801-04:00","level":"INFO","msg":"starting raft instance","component":"raft","storage":"/var/lib/webmesh/store","listen-addr":"[::]:9443"}
{"time":"2023-08-08T16:00:51.645221742-04:00","level":"INFO","msg":"starting restore from snapshot","component":"raft","id":"2-26-1691524849967","last-index":26,"last-term":2,"size-in-bytes":824}
{"time":"2023-08-08T16:01:01.645775939-04:00","level":"INFO","msg":"snapshot restore progress","component":"raft","id":"2-26-1691524849967","last-index":26,"last-term":2,"size-in-bytes":824,"read-bytes":0,"percent-complete":["%0.2f%%",0]}
{"time":"2023-08-08T16:01:11.645899269-04:00","level":"INFO","msg":"snapshot restore progress","component":"raft","id":"2-26-1691524849967","last-index":26,"last-term":2,"size-in-bytes":824,"read-bytes":0,"percent-complete":["%0.2f%%",0]}
{"time":"2023-08-08T16:01:21.646471945-04:00","level":"INFO","msg":"snapshot restore progress","component":"raft","id":"2-26-1691524849967","last-index":26,"last-term":2,"size-in-bytes":824,"read-bytes":0,"percent-complete":["%0.2f%%",0]}
{"time":"2023-08-08T16:01:31.645518945-04:00","level":"INFO","msg":"snapshot restore progress","component":"raft","id":"2-26-1691524849967","last-index":26,"last-term":2,"size-in-bytes":824,"read-bytes":0,"percent-complete":["%0.2f%%",0]}
[...]

I'm guessing it should be near instant.

ip changing

An extra thing I'll call out - and it's making me wonder if this should remain the default behavior or not - is unless you specify a --wireguard.key-file - you'll generate a fresh one on each boot (you can specify it at a non-existant path and it will generate it for you the first time).

Originally posted by @tinyzimmer in #7 (comment)

Today I'm trying to connect my rpi (at home) to my vps (as the server). The rpi gets 172.16.0.2 at first, but if I restart the node, it gets 172.16.0.3. If I restart it again, I get 172.16.0.2 again. Is that normal?

# vps (server)
sudo webmesh-node \
     --global.detect-endpoints \
     --global.mtls \
     --global.tls-cert-file=/opt/webmesh/tls.crt \
     --global.tls-key-file=/opt/webmesh/tls.key \
     --global.tls-ca-file=/opt/webmesh/ca.crt \
     --wireguard.key-file=/opt/webmesh/wg-key \
     --bootstrap.enabled \
     --wireguard.listen-port 51821 \
     --global.primary-endpoint vps_real_ip \
     --global.no-ipv6


# rpi
sudo webmesh-node \
     --global.detect-endpoints \
     --global.mtls \
     --global.tls-cert-file=/opt/webmesh/tls.crt \
     --global.tls-key-file=/opt/webmesh/tls.key \
     --global.tls-ca-file=/opt/webmesh/ca.crt \
     --wireguard.key-file=/opt/webmesh/wg-key \
     --global.verify-chain-only \
     --mesh.join-address=vps_real_ip:8443 \
     --wireguard.listen-port 51821 \
     --global.no-ipv6

# restart webmesh-node on rpi

Scaling

Hello,

I have been on the hunt for a library or project that might be useful as the core for a type of P2P mesh relay network system that massively scales.

The idea is to have a core server node running on a physical machine that provides the P2P mesh network relay system and then to build some P2P applications (ecommerce, distributed database, etc.) that will call their local server API to communicate across the network to other similar applications on other nodes.

It sounds like your webmesh might be a good start but I would like to investigate more as well.
Thanks

windows: provide easier method for creating connections than running as SYSTEM process

OS: windows 11

D:\Programs\webmesh_Windows_x86_64>webmesh-node.exe --global.insecure-skip-verify --mesh.join-addresses=100.86.44.111:8443
time=2023-11-02T21:33:20.243+08:00 level=INFO msg="Starting webmesh node" version=0.15.4 commit=697179cffa79a75c54882176288a11fa40ff274f buildDate=2023-10-31T15:00:54Z
time=2023-11-02T21:33:20.253+08:00 level=WARN msg="InsecureSkipVerify is enabled, skipping TLS verification"
time=2023-11-02T21:33:20.253+08:00 level=INFO msg="Starting storage and mesh connection"
time=2023-11-02T21:33:20.253+08:00 level=INFO msg="Joining webmesh cluster" component=mesh node-id=AMD-YES
time=2023-11-02T21:33:20.292+08:00 level=INFO msg="Starting mesh network manager" component=mesh node-id=AMD-YES component=net-manager
time=2023-11-02T21:33:20.322+08:00 level=INFO msg="Creating wireguard interface" component=mesh node-id=AMD-YES component=wireguard name=webmesh0
time=2023-11-02T21:33:20.385+08:00 level=INFO msg="Using existing driver 0.14"
time=2023-11-02T21:33:20.396+08:00 level=INFO msg="Creating adapter"
Error: failed to open mesh connection: join: handle join response: starting network manager: new wireguard interface: new system interface: new tun: uapi listen: open \\.\pipe\ProtectedPrefix\Administrators\WireGuard\webmesh0: This security ID may not be assigned as the owner of this object.

mtls: Global options are not properly writing all the needed TLS configurations

After I configured it according to this document https://webmeshproj.github.io/guides/personal-vpn/, when starting the webmesh node, it will report the following error:

$ /root/tools/webmesh-node --global.disable-ipv6
--global.detect-endpoints
--global.detect-private-endpoints
--global.mtls
--global.tls-ca-file=$(pwd)/pki/nodes/bootstrap/ca.crt
--global.tls-cert-file=$(pwd)/pki/nodes/bootstrap/tls.crt
--global.tls-key-file=$(pwd)/pki/nodes/bootstrap/tls.key
--global.verify-chain-only
--bootstrap.enabled
Error: invalid global options: mtls is enabled but no tls-ca-file is set

$ tree
.
└── pki
├── ca
│   ├── ca.crt
│   ├── tls.crt
│   └── tls.key
└── nodes
├── admin
│   ├── ca.crt
│   ├── tls.crt
│   └── tls.key
├── bootstrap
│   ├── ca.crt
│   ├── tls.crt
│   └── tls.key
└── node
├── ca.crt
├── tls.crt
└── tls.key

However, --global.tls-ca-file=$(pwd)/pki/nodes/bootstrap/ca.crt is set correctly and the file exists. Why does this error still appear?

/root/tools/webmesh-node --version

Webmesh Node
Version: 0.11.4
Commit: a40a85b
Build Date: 2023-10-07T07:26:16Z

RBAC: Improve documentation and allow for more customization

Nice project, I'm testing v0.2.1, 2 questions;

  1. It is not clear to me how we can allow multiple mtls users. From guide we create an admin-config by not specifing name when doing "wmctl pki gen-config ..". When I try to create a different config by specifying "--name user" and running "wmctl connect --config user.yaml" I get following error

time=2023-08-19T16:55:31.811+02:00 level=ERROR msg="error in storage subscription, retrying in 3 seconds" component=passthrough-raft error="rpc error: code = PermissionDenied desc = not allowed"

  1. Is it possible to join node to cluster using a specific IP, and fail if IP is already assigned to different node? From doc I see --bootstrap.ipv4-network for network CIDR, but nothing for nodes

can't recover after deleting /var/lib/webmesh while running

If I delete /var/lib/webmesh by mistake while webmesh-node is running, I can't kill the node unless I use -9.

And if I start webmesh-node again, I get Error: failed to open mesh connection: join: fatal join error starting network manager: new wireguard: new interface: new tun: create tun: invalid argument.

I can start the node again if I run sudo ip link delete webmesh0.

err: sendto: destination address required

I'm following the https://webmeshproj.github.io/guides/personal-vpn/ guide. I'm able to connect and some ping works, but I get this on the server side:

{"time":"2023-08-07T02:02:13.95968374-04:00","level":"INFO","msg":"starting webmesh node","version":"unknown","commit":"unknown","buildDate":"unknown"}
{"time":"2023-08-07T02:02:13.976051984-04:00","level":"INFO","msg":"using CN as node ID","component":"mesh","node-id":"server"}
{"time":"2023-08-07T02:02:13.976094557-04:00","level":"INFO","msg":"loading plugin","name":"mtls"}
{"time":"2023-08-07T02:02:14.010115941-04:00","level":"INFO","msg":"All 0 tables opened in 0s","component":"raft","storage":"/var/lib/webmesh/store","component":"raftbadger"}
{"time":"2023-08-07T02:02:14.017333494-04:00","level":"INFO","msg":"Discard stats nextEmptySlot: 0","component":"raft","storage":"/var/lib/webmesh/store","component":"raftbadger"}
{"time":"2023-08-07T02:02:14.017356434-04:00","level":"INFO","msg":"Set nextTxnTs to 0","component":"raft","storage":"/var/lib/webmesh/store","component":"raftbadger"}
{"time":"2023-08-07T02:02:14.076359285-04:00","level":"INFO","msg":"All 0 tables opened in 0s","component":"badger"}
{"time":"2023-08-07T02:02:14.090821071-04:00","level":"INFO","msg":"Discard stats nextEmptySlot: 0","component":"badger"}
{"time":"2023-08-07T02:02:14.090842809-04:00","level":"INFO","msg":"Set nextTxnTs to 0","component":"badger"}
{"time":"2023-08-07T02:02:14.091883921-04:00","level":"INFO","msg":"starting raft instance","component":"raft","storage":"/var/lib/webmesh/store","listen-addr":"[::]:9443"}
{"time":"2023-08-07T02:02:14.091997004-04:00","level":"INFO","msg":"initial configuration","component":"raft","index":0,"servers":["%+v",null]}
{"time":"2023-08-07T02:02:14.092069274-04:00","level":"INFO","msg":"bootstrapping cluster","component":"mesh","node-id":"server"}
{"time":"2023-08-07T02:02:14.092073906-04:00","level":"INFO","msg":"entering follower state","component":"raft","follower":{},"leader-address":"","leader-id":""}
{"time":"2023-08-07T02:02:18.538521544-04:00","level":"WARN","msg":"heartbeat timeout reached, starting election","component":"raft","last-leader-addr":"","last-leader-id":""}
{"time":"2023-08-07T02:02:18.53858546-04:00","level":"INFO","msg":"entering candidate state","component":"raft","node":{},"term":2}
{"time":"2023-08-07T02:02:18.538669733-04:00","level":"INFO","msg":"election won","component":"raft","term":2,"tally":1}
{"time":"2023-08-07T02:02:18.538681113-04:00","level":"INFO","msg":"entering leader state","component":"raft","leader":{}}
{"time":"2023-08-07T02:02:18.597710471-04:00","level":"INFO","msg":"newly bootstrapped cluster, setting IPv4/IPv6 networks","component":"mesh","node-id":"server","ipv4-network":"172.16.0.0/12","ipv6-network":"fda1:420:b42e::/48"}
{"time":"2023-08-07T02:02:18.598660537-04:00","level":"INFO","msg":"registering ourselves as a node in the cluster","component":"mesh","node-id":"server","server-id":"server"}
{"time":"2023-08-07T02:02:18.598683097-04:00","level":"INFO","msg":"generating wireguard key for ourselves","component":"mesh","node-id":"server"}
{"time":"2023-08-07T02:02:18.598689159-04:00","level":"INFO","msg":"generating new wireguard key","component":"mesh","node-id":"server"}
{"time":"2023-08-07T02:02:18.598998931-04:00","level":"INFO","msg":"starting network manager","component":"mesh","node-id":"server"}
{"time":"2023-08-07T02:02:18.599013156-04:00","level":"INFO","msg":"Configuring firewall","component":"net-manager","opts":{"ID":"server","DefaultPolicy":"accept","WireguardPort":51821,"RaftPort":9443,"GRPCPort":8443}}
{"time":"2023-08-07T02:02:18.643151554-04:00","level":"INFO","msg":"Configuring wireguard","component":"net-manager","opts":{"NodeID":"server","ListenPort":51821,"Name":"","ForceName":false,"ForceTUN":false,"PersistentKeepAlive":0,"MTU":1350,"AddressV4":"172.16.0.1/32","AddressV6":"fda1:420:b42e:442::/64","Metrics":false,"MetricsInterval":15000000000,"DisableIPv4":false,"DisableIPv6":false}}
{"time":"2023-08-07T02:02:18.643335776-04:00","level":"INFO","msg":"creating wireguard interface","component":"wireguard","name":"webmesh0"}
{"time":"2023-08-07T02:02:18.657321514-04:00","level":"INFO","msg":"re-adding ourselves to the cluster with the acquired wireguard address","component":"mesh","node-id":"server"}
{"time":"2023-08-07T02:02:18.657365768-04:00","level":"INFO","msg":"updating configuration","component":"raft","command":0,"server-id":"server","server-addr":"172.16.0.1:9443","servers":["%+v",[{"Suffrage":0,"ID":"server","Address":"172.16.0.1:9443"}]]}
{"time":"2023-08-07T02:02:18.657447005-04:00","level":"INFO","msg":"initial bootstrap complete","component":"mesh","node-id":"server"}
{"time":"2023-08-07T02:02:18.657459953-04:00","level":"INFO","msg":"mesh connection is ready, starting services"}
{"time":"2023-08-07T02:02:18.657884285-04:00","level":"INFO","msg":"Starting gRPC server on [::]:8443","component":"server"}
{"time":"2023-08-07T02:02:38.015101241-04:00","level":"INFO","msg":"started call","component":"server","protocol":"grpc","grpc.component":"server","grpc.service":"v1.Node","grpc.method":"Join","grpc.method_type":"unary","peer.address":"100.127.110.11:36454","grpc.start_time":"2023-08-07T02:02:38-04:00","grpc.time_ms":"0.01"}
{"time":"2023-08-07T02:02:38.015353545-04:00","level":"INFO","msg":"join request received","component":"node-server","op":"join","id":"admin","request":{"id":"admin","public_key":"sDNLid5iqiuIrFJ4sCYoUgaE4Xlbdy2taZazqYdZBF0=","raft_port":9443,"grpc_port":8443,"assign_ipv4":true}}
{"time":"2023-08-07T02:02:38.016100312-04:00","level":"INFO","msg":"adding non-voter to cluster","component":"node-server","op":"join","id":"admin","raft_address":"172.16.0.2:9443"}
{"time":"2023-08-07T02:02:38.01612437-04:00","level":"INFO","msg":"updating configuration","component":"raft","command":1,"server-id":"admin","server-addr":"172.16.0.2:9443","servers":["%+v",[{"Suffrage":0,"ID":"server","Address":"172.16.0.1:9443"},{"Suffrage":1,"ID":"admin","Address":"172.16.0.2:9443"}]]}
{"time":"2023-08-07T02:02:38.016176729-04:00","level":"INFO","msg":"added peer, starting replication","component":"raft","peer":"admin"}
{"time":"2023-08-07T02:02:38.016396001-04:00","level":"ERROR","msg":"failed to appendEntries to","component":"raft","peer":{"Suffrage":1,"ID":"admin","Address":"172.16.0.2:9443"},"error":"dial tcp 172.16.0.2:9443: connect: no route to host"}
{"time":"2023-08-07T02:02:38.016547253-04:00","level":"INFO","msg":"sending join response","component":"node-server","op":"join","id":"admin","response":{"address_ipv4":"172.16.0.2/32","address_ipv6":"fda1:420:b42e:ceea::/64","network_ipv4":"172.16.0.0/12","network_ipv6":"fda1:420:b42e::/48","peers":[{"id":"server","public_key":"5sdQXSMQGUXWzj7Ri8ZyYPoom2++4ISdWk+9sWSZDjg=","primary_endpoint":"100.85.215.110:51821","wireguard_endpoints":["100.85.215.110:51821"],"address_ipv4":"172.16.0.1/32","address_ipv6":"fda1:420:b42e:442::/64","allowed_ips":["172.16.0.1/32","fda1:420:b42e:442::/64"]}],"mesh_domain":"webmesh.internal."}}
{"time":"2023-08-07T02:02:38.016636105-04:00","level":"INFO","msg":"finished call","component":"server","protocol":"grpc","grpc.component":"server","grpc.service":"v1.Node","grpc.method":"Join","grpc.method_type":"unary","peer.address":"100.127.110.11:36454","grpc.start_time":"2023-08-07T02:02:38-04:00","grpc.code":"OK","grpc.time_ms":"1.548"}
{"time":"2023-08-07T02:02:38.017910703-04:00","level":"WARN","msg":"could not ping descendant","component":"net-manager","descendant":"admin","error":"run pinger: write ip4 0.0.0.0->172.16.0.2: sendto: destination address required"}
{"time":"2023-08-07T02:02:38.018289245-04:00","level":"WARN","msg":"could not ping descendant","component":"net-manager","descendant":"admin","error":"run pinger: write ip4 0.0.0.0->172.16.0.2: sendto: destination address required"}
{"time":"2023-08-07T02:02:41.339334625-04:00","level":"ERROR","msg":"failed to heartbeat to","component":"raft","peer":"172.16.0.2:9443","backoff time":10000000,"error":"dial tcp 172.16.0.2:9443: i/o timeout"}
{"time":"2023-08-07T02:02:44.949781283-04:00","level":"ERROR","msg":"failed to heartbeat to","component":"raft","peer":"172.16.0.2:9443","backoff time":10000000,"error":"dial tcp 172.16.0.2:9443: i/o timeout"}
{"time":"2023-08-07T02:02:48.366660528-04:00","level":"ERROR","msg":"failed to heartbeat to","component":"raft","peer":"172.16.0.2:9443","backoff time":10000000,"error":"dial tcp 172.16.0.2:9443: i/o timeout"}
{"time":"2023-08-07T02:02:51.944757019-04:00","level":"ERROR","msg":"failed to heartbeat to","component":"raft","peer":"172.16.0.2:9443","backoff time":20000000,"error":"dial tcp 172.16.0.2:9443: i/o timeout"}
{"time":"2023-08-07T02:02:55.425564585-04:00","level":"ERROR","msg":"failed to heartbeat to","component":"raft","peer":"172.16.0.2:9443","backoff time":40000000,"error":"dial tcp 172.16.0.2:9443: i/o timeout"}
{"time":"2023-08-07T02:02:55.741667558-04:00","level":"INFO","msg":"shutting down gRPC server"}
{"time":"2023-08-07T02:02:55.741742112-04:00","level":"INFO","msg":"Shutting down gRPC server","component":"server"}
{"time":"2023-08-07T02:02:55.741822634-04:00","level":"INFO","msg":"shutting down mesh connection"}
{"time":"2023-08-07T02:02:55.741864178-04:00","level":"INFO","msg":"creating new db snapshot","component":"snapshots"}
{"time":"2023-08-07T02:02:55.741992909-04:00","level":"INFO","msg":"Number of ranges found: 2","component":"badger"}
{"time":"2023-08-07T02:02:55.742081389-04:00","level":"INFO","msg":"DB.Backup Streaming about 0 B of uncompressed data (0 B on disk)","component":"badger"}
{"time":"2023-08-07T02:02:55.742121461-04:00","level":"INFO","msg":"Sent range 0 for iteration: [, 2f72656769737472792f65646765732f61646d696e2f736572766572fffffffffffffff1) of size: 0 B","component":"badger"}
{"time":"2023-08-07T02:02:55.742132076-04:00","level":"INFO","msg":"Sent range 1 for iteration: [2f72656769737472792f65646765732f61646d696e2f736572766572fffffffffffffff1, ) of size: 0 B","component":"badger"}
{"time":"2023-08-07T02:02:55.754551205-04:00","level":"INFO","msg":"DB.Backup Sent data of size 2.2 KiB","component":"badger"}
{"time":"2023-08-07T02:02:55.754931487-04:00","level":"INFO","msg":"db snapshot complete","component":"snapshots","duration":"13.017689ms","size":"982 B"}
{"time":"2023-08-07T02:02:55.754985262-04:00","level":"INFO","msg":"starting snapshot up to","component":"raft","index":20}
{"time":"2023-08-07T02:02:55.755028353-04:00","level":"INFO","msg":"creating new snapshot","component":"raft","storage":"/var/lib/webmesh/store","component":"snapshotstore","path":"/var/lib/webmesh/store/snapshots/2-20-1691388175755.tmp"}
{"time":"2023-08-07T02:02:55.781345175-04:00","level":"INFO","msg":"snapshot complete up to","component":"raft","index":20}
{"time":"2023-08-07T02:02:55.781571056-04:00","level":"ERROR","msg":"failed to transfer leadership","component":"raft","storage":"/var/lib/webmesh/store","error":"cannot find peer"}
{"time":"2023-08-07T02:02:56.721167203-04:00","level":"ERROR","msg":"failed to appendEntries to","component":"raft","peer":{"Suffrage":1,"ID":"admin","Address":"172.16.0.2:9443"},"error":"dial tcp 172.16.0.2:9443: i/o timeout"}
{"time":"2023-08-07T02:02:58.988560091-04:00","level":"ERROR","msg":"failed to heartbeat to","component":"raft","peer":"172.16.0.2:9443","backoff time":80000000,"error":"dial tcp 172.16.0.2:9443: i/o timeout"}
{"time":"2023-08-07T02:02:58.988724645-04:00","level":"INFO","msg":"Lifetime L0 stalled for: 0s","component":"badger"}
{"time":"2023-08-07T02:02:59.016826222-04:00","level":"INFO","msg":"Level 0 [ ]: NumTables: 01. Size: 1.3 KiB of 0 B. Score: 0.00->0.00 StaleData: 0 B Target FileSize: 64 MiB\nLevel 1 [ ]: NumTables: 00. Size: 0 B of 10 MiB. Score: 0.00->0.00 StaleData: 0 B Target FileSize: 2.0 MiB\nLevel 2 [ ]: NumTables: 00. Size: 0 B of 10 MiB. Score: 0.00->0.00 StaleData: 0 B Target FileSize: 2.0 MiB\nLevel 3 [ ]: NumTables: 00. Size: 0 B of 10 MiB. Score: 0.00->0.00 StaleData: 0 B Target FileSize: 2.0 MiB\nLevel 4 [ ]: NumTables: 00. Size: 0 B of 10 MiB. Score: 0.00->0.00 StaleData: 0 B Target FileSize: 2.0 MiB\nLevel 5 [ ]: NumTables: 00. Size: 0 B of 10 MiB. Score: 0.00->0.00 StaleData: 0 B Target FileSize: 2.0 MiB\nLevel 6 [B]: NumTables: 00. Size: 0 B of 10 MiB. Score: 0.00->0.00 StaleData: 0 B Target FileSize: 2.0 MiB\nLevel Done","component":"badger"}
{"time":"2023-08-07T02:02:59.031477119-04:00","level":"INFO","msg":"Lifetime L0 stalled for: 0s","component":"raft","storage":"/var/lib/webmesh/store","component":"raftbadger"}
{"time":"2023-08-07T02:02:59.099681848-04:00","level":"INFO","msg":"Level 0 [ ]: NumTables: 01. Size: 2.3 KiB of 0 B. Score: 0.00->0.00 StaleData: 0 B Target FileSize: 64 MiB\nLevel 1 [ ]: NumTables: 00. Size: 0 B of 10 MiB. Score: 0.00->0.00 StaleData: 0 B Target FileSize: 2.0 MiB\nLevel 2 [ ]: NumTables: 00. Size: 0 B of 10 MiB. Score: 0.00->0.00 StaleData: 0 B Target FileSize: 2.0 MiB\nLevel 3 [ ]: NumTables: 00. Size: 0 B of 10 MiB. Score: 0.00->0.00 StaleData: 0 B Target FileSize: 2.0 MiB\nLevel 4 [ ]: NumTables: 00. Size: 0 B of 10 MiB. Score: 0.00->0.00 StaleData: 0 B Target FileSize: 2.0 MiB\nLevel 5 [ ]: NumTables: 00. Size: 0 B of 10 MiB. Score: 0.00->0.00 StaleData: 0 B Target FileSize: 2.0 MiB\nLevel 6 [B]: NumTables: 00. Size: 0 B of 10 MiB. Score: 0.00->0.00 StaleData: 0 B Target FileSize: 2.0 MiB\nLevel Done","component":"raft","storage":"/var/lib/webmesh/store","component":"raftbadger"}
[pid 219825] sendto(22, "\10\0L\322\270\356\0\0\27y\6rKN\376\214\356nZ\225\234\267O~\235K^Y\302B\227V", 32, 0, {sa_family=AF_INET, sin_port=htons(0), sin_addr=inet_addr("172.16.0.2")}, 16 <unfinished ...>
[pid 219825] <... sendto resumed>)      = -1 EDESTADDRREQ (Destination address required)

I think this cause disconnections.

0.1.2

How is the latency?

Hello,

I am still researching for the p2p project and am interested in webmesh more. The project will initially be running on Windows and not in a docker framework, but later will be cross platform as well.

Can you please tell me how much latency you get relative to native running in the network transfers?

Also, how well do you think that it scales?

Also, as a though, you might be interested in using Wintun for Windows (https://github.com/fumiama/wintun) as it will load the wintun kernel dll at runtime just like the Yggdrasil project does (https://github.com/yggdrasil-network/yggdrasil-go) just as a thought that might be of use.

Thanks and have a great day

docs: Improve installation and configuration documentation for non-container use cases

The current README file says:

The node binary is distributed as a container image or a standalone binary.
To install the binary, download the latest release for your platform and architecture from the releases page. To run the container image, pull the latest image from the GitHub container registry. The examples in this guide will use the image.

I use Ubuntu 22.04 on my machines and a lot of LXD Containers & VMs.

Docker is redundant in purpose/function to LXD and although I could run Docker & Docker apps I'd prefer not to incur that overhead.

So I am interested in trying/installing the webmesh binary.

But the README only gives more information about how to run/configure the Docker image and nothing further about how to run/configure the Binary version. Info like: available command line options etc.

Is there any info about the install/configuration etc of the Binary webmesh?

thanks
brian

Feature request: Embedded Targets Support

Would it be possible to get a binary compiled for the MIPS CPU arch? I would like to use this on some TP-Link Archer C7 routers and they have a MIPSLE CPU arch.
Thank you

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.