|
|
@@ -709,17 +709,14 @@ impl RendezvousServer {
|
|
709
|
709
|
}
|
|
710
|
710
|
ph.nat_type = NatType::SYMMETRIC.into(); // will force relay
|
|
711
|
711
|
}
|
|
712
|
|
- let same_intranet = !ws
|
|
713
|
|
- && match peer_addr {
|
|
714
|
|
- SocketAddr::V4(a) => match addr {
|
|
715
|
|
- SocketAddr::V4(b) => a.ip() == b.ip(),
|
|
|
712
|
+ let same_intranet: bool = !ws
|
|
|
713
|
+ && (peer_is_lan && is_lan || {
|
|
|
714
|
+ match (peer_addr, addr) {
|
|
|
715
|
+ (SocketAddr::V4(a), SocketAddr::V4(b)) => a.ip() == b.ip(),
|
|
|
716
|
+ (SocketAddr::V6(a), SocketAddr::V6(b)) => a.ip() == b.ip(),
|
|
716
|
717
|
_ => false,
|
|
717
|
|
- },
|
|
718
|
|
- SocketAddr::V6(a) => match addr {
|
|
719
|
|
- SocketAddr::V6(b) => a.ip() == b.ip(),
|
|
720
|
|
- _ => false,
|
|
721
|
|
- },
|
|
722
|
|
- };
|
|
|
718
|
+ }
|
|
|
719
|
+ });
|
|
723
|
720
|
let socket_addr = AddrMangle::encode(addr).into();
|
|
724
|
721
|
if same_intranet {
|
|
725
|
722
|
log::debug!(
|
|
|
@@ -1191,8 +1188,16 @@ impl RendezvousServer {
|
|
1191
|
1188
|
#[inline]
|
|
1192
|
1189
|
fn is_lan(&self, addr: SocketAddr) -> bool {
|
|
1193
|
1190
|
if let Some(network) = &self.inner.mask {
|
|
1194
|
|
- if let SocketAddr::V4(addr) = addr {
|
|
1195
|
|
- return network.contains(*addr.ip());
|
|
|
1191
|
+ match addr {
|
|
|
1192
|
+ SocketAddr::V4(v4_socket_addr) => {
|
|
|
1193
|
+ return network.contains(*v4_socket_addr.ip());
|
|
|
1194
|
+ }
|
|
|
1195
|
+
|
|
|
1196
|
+ SocketAddr::V6(v6_socket_addr) => {
|
|
|
1197
|
+ if let Some(v4_addr) = v6_socket_addr.ip().to_ipv4_mapped() {
|
|
|
1198
|
+ return network.contains(v4_addr);
|
|
|
1199
|
+ }
|
|
|
1200
|
+ }
|
|
1196
|
1201
|
}
|
|
1197
|
1202
|
}
|
|
1198
|
1203
|
false
|