summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorSebastian Holmin <sebastian.holmin@mullvad.net>2024-11-05 09:59:33 +0100
committerSebastian Holmin <sebastian.holmin@mullvad.net>2024-11-05 09:59:33 +0100
commit88dae3d352bf4530aaf1e29e12cfcb578bb13574 (patch)
tree9f1fe1658d416eedb27ff6074069daccfc3c8462
parent9bdbc0a2232aa689a061da560d04b4274037a609 (diff)
downloadmullvadvpn-88dae3d352bf4530aaf1e29e12cfcb578bb13574.tar.xz
mullvadvpn-88dae3d352bf4530aaf1e29e12cfcb578bb13574.zip
Create shadowsocks socket with IP version of endpoint
-rw-r--r--tunnel-obfuscation/src/shadowsocks.rs10
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)?;