-
Notifications
You must be signed in to change notification settings - Fork 14
P2P Connectivity
Radu Dan edited this page Dec 4, 2024
·
2 revisions
Ouisync supports connections between two arbitrary peers Alice and Bob, each behind their own NAT under the following configurations:
| Alice \ Bob | Public | Open | Closed | Private |
|---|---|---|---|---|
| Public | ✅ | ✅ | ✅ | ✅ |
| Open | ✅ | ✅ | ✅ | ✅ |
| Closed | ✅ | ✅ | ✅ | ❌ |
| Private | ✅ | ✅ | ❌ | ❌ |
Unles specified otherwise, all terms are used as defined in RFC-4787.
-
Public: an open server accepting connections from anyone: signals either the absence of a NAT (e.g. a routable IP address) or a port forwarded statically (by the router administrator), automatically via IGDP, NAT-PMP or PCP, or implicitly by a very permissive firewall. Corresponds to
Endpoint-Independent MappingwithEndpoint-Independent Filtering -
Open: the configuration recommended by RFC-4787 for NATs that actively encourage peer to peer communication:
Endpoint-Independent MappingandAddress-Dependent Filtering -
Closed: a very common configuration in home networks that differs from the above by not being able to connect to the more private NATs described below. Combines
Endpoint-Independent MappingwithAddress and Port-Dependent Filtering -
Private: common in corporate and / or mobile networks, this type of configuration is not friendly to peer-to-peer applications and can only connect to a Public or Open peer. Corresponds to either
Address-Dependent MappingorAddress and Port-Dependent Mappingwith arbitrary filtering behavior, though usually the same or even more restrictive than mapping
- we do not and probably never will support non-deterministic NATs, nor NATs that perform port overloading
- we do not currently support multi-layer NATs; if you deploy your own NAT, it is your responsibility to ensure connectivity
- NAT-PMP and PCP are not currently implemented, so your CGNAT mileage may vary
- while not strictly required, hairpinning is strongly recommended as a failsafe alternative for local discovery