Browse Source

dns::remove_ipv6_entries

pull/57/head
ssrlive 3 years ago
parent
commit
6439cc7b43
  1. 6
      src/dns.rs
  2. 10
      src/tun2proxy.rs

6
src/dns.rs

@ -50,6 +50,12 @@ pub fn build_dns_response(mut request: Message, domain: &str, ip: IpAddr, ttl: u
Ok(request)
}
pub fn remove_ipv6_entries(message: &mut Message) {
message
.answers_mut()
.retain(|answer| !matches!(answer.data(), Some(RData::AAAA(_))));
}
pub fn extract_ipaddr_from_dns_message(message: &Message) -> Result<IpAddr, String> {
if message.response_code() != ResponseCode::NoError {
return Err(format!("{:?}", message.response_code()));

10
src/tun2proxy.rs

@ -771,9 +771,17 @@ impl<'a> TunToProxy<'a> {
let buf = buf[..packet_size].to_vec();
let header = UdpHeader::retrieve_from_stream(&mut &buf[..])?;
let buf = if info.dst.port() == 53 {
let mut message = dns::parse_data_to_dns_message(&buf[header.len()..], false)?;
dns::remove_ipv6_entries(&mut message); // TODO: Configurable
message.to_vec()?
} else {
buf[header.len()..].to_vec()
};
// Write to client
let src = state.udp_origin_dst.ok_or("udp address")?;
self.send_udp_packet_to_client(src, info.src, &buf[header.len()..])?;
self.send_udp_packet_to_client(src, info.src, &buf)?;
}
return Ok(());

Loading…
Cancel
Save