feat(lite): add opt-in tun ipv6 mode
This commit is contained in:
@@ -587,6 +587,20 @@ class Socks5Bridge:
|
||||
except OSError:
|
||||
pass
|
||||
|
||||
def _proxy_target(self, target: Address) -> Address:
|
||||
"""为上游 CONNECT 恢复唯一 DNS 域名,给 IPv6 目标提供 IPv4 回退。"""
|
||||
try:
|
||||
ipaddress.ip_address(target.host)
|
||||
except ValueError:
|
||||
return target
|
||||
domain = self._dns.lookup_ip(target.host)
|
||||
if not domain:
|
||||
return target
|
||||
self.log(
|
||||
f"[桥接] IPv6 目标回退域名解析: {target.host} -> {domain}:{target.port}"
|
||||
)
|
||||
return Address(domain, target.port)
|
||||
|
||||
def _open_target(self, target: Address) -> socket.socket:
|
||||
policy_host = self._policy_host(target.host)
|
||||
rule = self._route_rule(policy_host, target.host)
|
||||
@@ -594,12 +608,12 @@ class Socks5Bridge:
|
||||
if rule and str(rule.get("action") or "").lower() == "node":
|
||||
if route_node is None:
|
||||
raise ConnectionError("域名路由指定的节点不可用")
|
||||
return self._dialer(route_node).open(target)
|
||||
return self._dialer(route_node).open(self._proxy_target(target))
|
||||
direct = self._direct_target_for(target.host, target.port, policy_host)
|
||||
if direct is not None:
|
||||
self._ensure_direct_routes(direct[0], direct[1])
|
||||
return socket.create_connection(direct, 15)
|
||||
return self._dialer(self.node).open(target)
|
||||
return self._dialer(self.node).open(self._proxy_target(target))
|
||||
|
||||
def _tcp(self, client: socket.socket, target: Address):
|
||||
upstream = self._open_target(target)
|
||||
|
||||
Reference in New Issue
Block a user