diff options
| author | David Lönnhager <david.l@mullvad.net> | 2025-09-25 13:36:24 +0200 |
|---|---|---|
| committer | David Lönnhager <david.l@mullvad.net> | 2025-09-25 13:36:24 +0200 |
| commit | 3ab4829a7a14e087807f807a4e0e643f18d26db8 (patch) | |
| tree | acebd01a8ba01d4d74c4c6347b333bae421b35f5 | |
| parent | 56c3745b7852ec992e629d3f66b3e206a70f624e (diff) | |
| parent | d9b16dec23976e71aaa7ff3624c435c855435e84 (diff) | |
| download | mullvadvpn-3ab4829a7a14e087807f807a4e0e643f18d26db8.tar.xz mullvadvpn-3ab4829a7a14e087807f807a4e0e643f18d26db8.zip | |
Merge branch 'choose-random-quic-addr'
4 files changed, 14 insertions, 12 deletions
diff --git a/mullvad-management-interface/src/types/conversions/relay_constraints.rs b/mullvad-management-interface/src/types/conversions/relay_constraints.rs index 2a513b58fe..6fa52b3fa5 100644 --- a/mullvad-management-interface/src/types/conversions/relay_constraints.rs +++ b/mullvad-management-interface/src/types/conversions/relay_constraints.rs @@ -65,7 +65,7 @@ impl TryFrom<&proto::OpenvpnConstraints> for mullvad_types::relay_constraints::O Ok(mullvad_constraints::OpenVpnConstraints { port: Constraint::from(match &constraints.port { - Some(port) => Some(mullvad_constraints::TransportPort::try_from(port.clone())?), + Some(port) => Some(mullvad_constraints::TransportPort::try_from(*port)?), None => None, }), }) diff --git a/mullvad-relay-selector/src/relay_selector/helpers.rs b/mullvad-relay-selector/src/relay_selector/helpers.rs index 23a050b6c6..977b92b26e 100644 --- a/mullvad-relay-selector/src/relay_selector/helpers.rs +++ b/mullvad-relay-selector/src/relay_selector/helpers.rs @@ -201,10 +201,12 @@ pub fn get_quic_obfuscator( let quic = relay.wireguard()?.quic()?; let config = { let hostname = quic.hostname().to_string(); - let endpoint = match ip_version { - IpVersion::V4 => SocketAddr::from((quic.in_ipv4()?, quic.port())), - IpVersion::V6 => SocketAddr::from((quic.in_ipv6()?, quic.port())), + let addrs: Vec<IpAddr> = match ip_version { + IpVersion::V4 => quic.in_ipv4().map(IpAddr::from).collect(), + IpVersion::V6 => quic.in_ipv6().map(IpAddr::from).collect(), }; + let &in_ip = addrs.iter().choose(&mut rand::rng())?; + let endpoint = SocketAddr::from((in_ip, quic.port())); let auth_token = quic.auth_token().to_string(); ObfuscatorConfig::Quic { hostname, diff --git a/mullvad-relay-selector/src/relay_selector/matcher.rs b/mullvad-relay-selector/src/relay_selector/matcher.rs index 14402feb67..e0efca03a4 100644 --- a/mullvad-relay-selector/src/relay_selector/matcher.rs +++ b/mullvad-relay-selector/src/relay_selector/matcher.rs @@ -140,8 +140,8 @@ fn filter_on_obfuscation( ObfuscationQuery::Quic => match endpoint_data.quic() { Some(quic) => match query.ip_version { Constraint::Any => true, - Constraint::Only(IpVersion::V4) => quic.in_ipv4().is_some(), - Constraint::Only(IpVersion::V6) => quic.in_ipv6().is_some(), + Constraint::Only(IpVersion::V4) => quic.in_ipv4().next().is_some(), + Constraint::Only(IpVersion::V6) => quic.in_ipv6().next().is_some(), }, None => false, }, diff --git a/mullvad-types/src/relay_list.rs b/mullvad-types/src/relay_list.rs index ee3c107b7e..d28ed88e74 100644 --- a/mullvad-types/src/relay_list.rs +++ b/mullvad-types/src/relay_list.rs @@ -165,26 +165,26 @@ impl Quic { } } - /// In address as an IPv4 address. + /// Return IPv4 in-addresses. /// /// Use this if you want to connect to the masque-proxy using IPv4. - pub fn in_ipv4(&self) -> Option<Ipv4Addr> { + pub fn in_ipv4(&self) -> impl Iterator<Item = Ipv4Addr> { let ipv4 = |ipaddr: &IpAddr| match ipaddr { IpAddr::V4(ipv4_addr) => Some(*ipv4_addr), IpAddr::V6(_) => None, }; - self.addr_in.iter().find_map(ipv4) + self.addr_in.iter().filter_map(ipv4) } - /// In address as an IPv6 address. + /// Return IPv6 in-addresses. /// /// Use this if you want to connect to the masque-proxy using IPv6. - pub fn in_ipv6(&self) -> Option<Ipv6Addr> { + pub fn in_ipv6(&self) -> impl Iterator<Item = Ipv6Addr> { let ipv6 = |ipaddr: &IpAddr| match ipaddr { IpAddr::V4(_) => None, IpAddr::V6(ipv6_addr) => Some(*ipv6_addr), }; - self.addr_in.iter().find_map(ipv6) + self.addr_in.iter().filter_map(ipv6) } /// Port of the masque-proxy daemon. |
