porech / engarde

A go network utility to create a reliable IP tunnel over multiple connections
GNU General Public License v2.0
276 stars 41 forks source link

Feature Request: #33

Closed Johnr24 closed 3 years ago

Johnr24 commented 4 years ago

Hello I was wondering if you could add a "classic" Bonding mode as you discussed on lowendtalk, let me know as I would love to test

ale-rinaldi commented 4 years ago

Hello, yeah, it's totally possible to implement this feature and I'll go on with that in the next few days (I live in Bergamo, Italy, so I definitely have time for that at the moment).
My main concern is that it won't be really useful, since engarde is not focused on speed by design and I'm not sure you'll gain any benefit from this kind of bonding; however, I'm planning to work on something to improve this aspect, too.
I'll let you know as soon as I have news :)

Marctraider commented 4 years ago

Be safe man!

serniko97 commented 4 years ago

Hi, I'm also from north Italy 🇮🇹

I just saw this software and I have to say it is very good. I would like to test the classic bonding too since there is nothing that does that in a convenient way and sometimes I really need that.

Marctraider commented 4 years ago

Would be nice to have classic bonding in addition to redundant mode. (Since that now looks 100.0% stable, been running for months without interruption) we must be sure it does not interfere with current mechanism.

Maybe with a switch in the web interface (And API command) to seamlessly change mode without interruption.

I could implement in my script detection of high bandwidth so it automatically switches back and forth based on bandwidth utilization.

I think this will have to be fixed first though: https://github.com/porech/engarde/issues/22

ale-rinaldi commented 4 years ago

You're right @Marctraider , issue #22 is what I'm trying to work on in those days. I'm approaching with different Golang network libraries to see which fits better, but I don't exclude rebuilding some small parts that handle network traffic in pure C/C++.

However, given the fact that this feature seems to be useful for some pepole, I could work on this before. Just don't expect, for now, to have more than about 250Mbps of throughput, which is what I see being the current limit on an average server (it could be enough in many use cases, by the way).

As always, I'll create separate builds with that new feature and I'll ask you to join me stressing them, so that @Johnr24 and @serniko97 can test out the new feature, and maybe @Marctraider can help me ensuring the redundant mode has no regressions, before merging it all to the official builds :)

Johnr24 commented 4 years ago

Great 250mbps would be amazing Look forward to seeing your builds Stay Safe Everyone

serniko97 commented 4 years ago

I have just a question, does it work on top of an existing VPN or there might be conflicts?

ale-rinaldi commented 4 years ago

Do you mean WireGuard over Engarde over another VPN? I wouldn't recommend this, but as long as the other VPN can pass UDP traffic I see no issues in that.

If you mean using Engarde on an already existing WireGuard VPN, yes it's totally possible, you just need to change the endpoint on the peer with engarde-client (the one with multiple connections) replacing it with 127.0.0.1:your-engarde-port. Please note this does not yet work on the official Windows WireGuard client, so you'll need Tunsafe for that.

Johnr24 commented 4 years ago

Hello, yeah, it's totally possible to implement this feature and I'll go on with that in the next few days (I live in Bergamo, Italy, so I definitely have time for that at the moment). My main concern is that it won't be really useful, since engarde is not focused on speed by design and I'm not sure you'll gain any benefit from this kind of bonding; however, I'm planning to work on something to improve this aspect, too. I'll let you know as soon as I have news :)

Hey! Hope you are staying safe! I was just wondering if you'd managed to make any progress on this! Stay Safe Best J

ale-rinaldi commented 4 years ago

Hello, yes, luckily we're safe, thanks :)

I'm taking some more time on this: I'm trying to refactor the code as much as I can to clean things up a little and implement the function without the risk to break something else.

I hope to have something working on, let's say, next week :)

Thanks!

Marctraider commented 4 years ago

Mhh was thinking for build stability testing it could be handy if someone would run two simple linux VM's and simulate a Multiple WAN <-> VPS connection.

In that case if stability remains good you'd only have to worry about making the code more efficient :)

Not sure if i personally have the capacity to run more VM's though, but if i do ill look into it.

My real life setup with engarde now works 24/7 stable but i can no longer jeopardize that.

serniko97 commented 4 years ago

Wouldn't a host and a VM be enough for testing? I could probably do the tests but in a couple of weeks I will start studying and won't have as much time.

Marctraider commented 4 years ago

Yea I suppose so, i also forgot there were windows binaries.

ale-rinaldi commented 4 years ago

Hello, luckily, DigitalOcean gave me $ 50 in credit for engarde developement, and I can easily spin up virtual machines to test it. i use my own laptop for Windows testing, but most of the code is shared so it doesn't make a big difference.

I'll let you know as soon as I have news :)

ale-rinaldi commented 4 years ago

Small update just to say I didn't forget about this, but some other works unfortunately took more priority than they should. Still working on this by the way, news soon I hope :)

jphein commented 4 years ago

I would love to test a classic bonding setup using WireGuard. I currently have only seen OpenVPN implementations. Let us know! =]

Thanks for the great work!

ale-rinaldi commented 4 years ago

Hello, just to say I'm still alive but I'm not having free time to work on this as I'd like. But I didn't forget and I'm really going to implement this :)

Marctraider commented 4 years ago

No rush man, its done when its done :-)

jphein commented 4 years ago

Glad you're alive!!!! Yay =]

Johnr24 commented 3 years ago

Just to say the popular OpenMPTCPRouter Project already has this functionality