mirror of
https://github.com/EasyTier/EasyTier.git
synced 2026-05-07 18:24:36 +00:00
when gather v6 bind addrs should only rely on v6 range (#707)
This commit is contained in:
@@ -220,7 +220,7 @@ impl IPCollector {
|
|||||||
return self.cached_ip_list.read().await.deref().clone();
|
return self.cached_ip_list.read().await.deref().clone();
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn collect_interfaces(net_ns: NetNS) -> Vec<NetworkInterface> {
|
pub async fn collect_interfaces(net_ns: NetNS, filter: bool) -> Vec<NetworkInterface> {
|
||||||
let _g = net_ns.guard();
|
let _g = net_ns.guard();
|
||||||
let ifaces = pnet::datalink::interfaces();
|
let ifaces = pnet::datalink::interfaces();
|
||||||
let mut ret = vec![];
|
let mut ret = vec![];
|
||||||
@@ -229,7 +229,7 @@ impl IPCollector {
|
|||||||
iface: iface.clone(),
|
iface: iface.clone(),
|
||||||
};
|
};
|
||||||
|
|
||||||
if !f.filter_iface().await {
|
if filter && !f.filter_iface().await {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -243,21 +243,36 @@ impl IPCollector {
|
|||||||
async fn do_collect_local_ip_addrs(net_ns: NetNS) -> GetIpListResponse {
|
async fn do_collect_local_ip_addrs(net_ns: NetNS) -> GetIpListResponse {
|
||||||
let mut ret = GetIpListResponse::default();
|
let mut ret = GetIpListResponse::default();
|
||||||
|
|
||||||
let ifaces = Self::collect_interfaces(net_ns.clone()).await;
|
let ifaces = Self::collect_interfaces(net_ns.clone(), true).await;
|
||||||
let _g = net_ns.guard();
|
let _g = net_ns.guard();
|
||||||
for iface in ifaces {
|
for iface in ifaces {
|
||||||
for ip in iface.ips {
|
for ip in iface.ips {
|
||||||
let ip: std::net::IpAddr = ip.ip();
|
let ip: std::net::IpAddr = ip.ip();
|
||||||
|
match ip {
|
||||||
|
std::net::IpAddr::V4(v4) => {
|
||||||
if ip.is_loopback() || ip.is_multicast() {
|
if ip.is_loopback() || ip.is_multicast() {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
match ip {
|
|
||||||
std::net::IpAddr::V4(v4) => {
|
|
||||||
ret.interface_ipv4s.push(v4.into());
|
ret.interface_ipv4s.push(v4.into());
|
||||||
}
|
}
|
||||||
|
_ => {}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
let ifaces = Self::collect_interfaces(net_ns.clone(), false).await;
|
||||||
|
let _g = net_ns.guard();
|
||||||
|
for iface in ifaces {
|
||||||
|
for ip in iface.ips {
|
||||||
|
let ip: std::net::IpAddr = ip.ip();
|
||||||
|
match ip {
|
||||||
std::net::IpAddr::V6(v6) => {
|
std::net::IpAddr::V6(v6) => {
|
||||||
|
if v6.is_multicast() || v6.is_loopback() || v6.is_unicast_link_local() {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
ret.interface_ipv6s.push(v6.into());
|
ret.interface_ipv6s.push(v6.into());
|
||||||
}
|
}
|
||||||
|
_ => {}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -43,8 +43,8 @@ async fn set_bind_addr_for_peer_connector(
|
|||||||
connector.set_bind_addrs(bind_addrs);
|
connector.set_bind_addrs(bind_addrs);
|
||||||
} else {
|
} else {
|
||||||
let mut bind_addrs = vec![];
|
let mut bind_addrs = vec![];
|
||||||
for ipv6 in ips.interface_ipv6s {
|
for ipv6 in ips.interface_ipv6s.iter().chain(ips.public_ipv6.iter()) {
|
||||||
let socket_addr = SocketAddrV6::new(ipv6.into(), 0, 0, 0).into();
|
let socket_addr = SocketAddrV6::new(std::net::Ipv6Addr::from(*ipv6), 0, 0, 0).into();
|
||||||
bind_addrs.push(socket_addr);
|
bind_addrs.push(socket_addr);
|
||||||
}
|
}
|
||||||
connector.set_bind_addrs(bind_addrs);
|
connector.set_bind_addrs(bind_addrs);
|
||||||
@@ -96,7 +96,8 @@ pub async fn create_connector_by_url(
|
|||||||
}
|
}
|
||||||
#[cfg(feature = "quic")]
|
#[cfg(feature = "quic")]
|
||||||
"quic" => {
|
"quic" => {
|
||||||
let dst_addr = check_scheme_and_get_socket_addr::<SocketAddr>(&url, "quic", ip_version)?;
|
let dst_addr =
|
||||||
|
check_scheme_and_get_socket_addr::<SocketAddr>(&url, "quic", ip_version)?;
|
||||||
let mut connector = QUICTunnelConnector::new(url);
|
let mut connector = QUICTunnelConnector::new(url);
|
||||||
if global_ctx.config.get_flags().bind_device {
|
if global_ctx.config.get_flags().bind_device {
|
||||||
set_bind_addr_for_peer_connector(
|
set_bind_addr_for_peer_connector(
|
||||||
|
|||||||
Reference in New Issue
Block a user