diff options
| author | Sebastian Holmin <sebastian.holmin@mullvad.net> | 2024-11-05 09:59:33 +0100 |
|---|---|---|
| committer | Sebastian Holmin <sebastian.holmin@mullvad.net> | 2024-11-05 09:59:33 +0100 |
| commit | 88dae3d352bf4530aaf1e29e12cfcb578bb13574 (patch) | |
| tree | 9f1fe1658d416eedb27ff6074069daccfc3c8462 | |
| parent | 9bdbc0a2232aa689a061da560d04b4274037a609 (diff) | |
| download | mullvadvpn-88dae3d352bf4530aaf1e29e12cfcb578bb13574.tar.xz mullvadvpn-88dae3d352bf4530aaf1e29e12cfcb578bb13574.zip | |
Create shadowsocks socket with IP version of endpoint
| -rw-r--r-- | tunnel-obfuscation/src/shadowsocks.rs | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/tunnel-obfuscation/src/shadowsocks.rs b/tunnel-obfuscation/src/shadowsocks.rs index fc0f466029..b1452a332d 100644 --- a/tunnel-obfuscation/src/shadowsocks.rs +++ b/tunnel-obfuscation/src/shadowsocks.rs @@ -84,6 +84,7 @@ impl Shadowsocks { let (shutdown_tx, shutdown_rx) = oneshot::channel(); let remote_socket = create_shadowsocks_socket( + settings.shadowsocks_endpoint.is_ipv4(), #[cfg(target_os = "linux")] settings.fwmark, ) @@ -175,12 +176,17 @@ fn connect_shadowsocks( } async fn create_shadowsocks_socket( + ipv4: bool, #[cfg(target_os = "linux")] fwmark: Option<u32>, ) -> std::result::Result<UdpSocket, Error> { - let socket = UdpSocket::bind("0.0.0.0:0") + let random_bind_addr = if ipv4 { + SocketAddr::new("0.0.0.0".parse().unwrap(), 0) + } else { + SocketAddr::new("::".parse().unwrap(), 0) + }; + let socket = UdpSocket::bind(random_bind_addr) .await .map_err(Error::BindRemoteUdp)?; - #[cfg(target_os = "linux")] if let Some(fwmark) = fwmark { setsockopt(socket.as_raw_fd(), sockopt::Mark, &fwmark).map_err(Error::SetFwmark)?; |
