voidpointertonull · GitHub

Initial multipath TCP support was merged into golang recently which should make its usage quite convenient:
golang/go#56539

Given that MPTCP is essentially an extension of TCP, basic support should only need opting into the extension at the time of socket creation. The kernel definitely supports graceful fallback to TCP in case the other side doesn't signal MPTCP support or a bogus middlebox breaks support, and apparently the golang implementation also adds fallback, even though the test case also explicitly checks for success:
golang/go@ 383a4e7

Support should be straight-forward (once the time is right with the appropriate golang release) with the mentioned fallbacks. A likely good practice for adoption would be adding a config option making the feature opt-in first, then given no issues and the community supporting the idea, opt-out could become the default in the future.

Security considerations: Eventually it might be a good idea to support the concept of one host connecting with multiple addresses at the same time. Given the typical usage of Syncthing and its security model, it already seems to be largely independent of relying on hosts using only specific IP addresses, and by starting with opt-in support, security considerations of likely mostly enterprise users would be revealed eventually. Also consider that having multiple addresses is not unique to MPTCP as Syncthing itself is already aware of the concept to some degree, and there are also plans for multipath support in QUIC just on a different layer:
https://datatracker.ietf.org/doc/draft-ietf-quic-multipath/
quic-go/quic-go#3343

Read the original on github.com ↗