{"record":{"id":"4aa68ea0429bc962","repo":"XX-net/XX-Net","slug":"servers-could-not-be-resolved-r","errorCode":null,"errorMessage":"Servers could not be resolved, %r.","messagePattern":"Servers could not be resolved, %r\\.","errorType":"exception","errorClass":"Exception","httpStatus":null,"severity":"critical","filePath":"code/default/gae_proxy/local/ipv6_tunnel/pteredor.py","lineNumber":263,"sourceCode":"            self.teredo_port = remote_port\n        self.prober_dict = collections.defaultdict(default_prober_dict)\n        self.ip2server = collections.defaultdict(list)\n        server_ip_list = []\n        if isinstance(server_list, str):\n            server_list = [server_list]\n        for server in server_list:\n            if is_ipv4(server):\n                server_ip_list.append(server)\n            else:\n                ip_list = resolve(server)\n                for ip in ip_list:\n                    self.ip2server[ip].append(server)\n                server_ip_list += ip_list\n        self.server_ip_list = remove_same_server(server_ip_list)\n        if len(self.server_ip_list) < 1:\n            msg = 'Servers could not be resolved, %r.' % server_list\n            print(msg)\n            raise Exception(msg)\n        elif len(self.server_ip_list) < 2:\n            print(('Need input more teredo servers, now is %d.'\n                   % len(self.server_ip_list)))\n        threading.Thread(target=self.receive_loop, name=\"teredo_recieve_loop\").start()\n        if probe_nat:\n            self.nat_type = self.nat_type_probe()\n\n    def unpack_indication(self, data):\n        return struct.unpack('!2s4s', data[2:8])\n\n    def handle_ra_packet(self, ipv6_pkt):\n        server_ip = socket.inet_ntoa(ipv6_pkt[76:80])\n        cone_flag = bytearray(ipv6_pkt)[32] >> 7 & 1\n        logger.debug('ipv6_pkt ; RA_cone = %s\\nsrc:%s\\ndst:%s' % (\n            cone_flag,\n            str2hex(ipv6_pkt[8:24]),\n            str2hex(ipv6_pkt[24:40])))\n        return server_ip, cone_flag","sourceCodeStart":245,"sourceCodeEnd":281,"githubUrl":"https://github.com/XX-net/XX-Net/blob/cfa5bc17b67676e467f37ec50766127e0ab5f0aa/code/default/gae_proxy/local/ipv6_tunnel/pteredor.py#L245-L281","documentation":"Generic Exception raised in Pteredor.__init__ when DNS/system resolution of the teredo server list yields fewer than 1 usable server IP. The message lists the input server_list. A secondary warning path prints when fewer than 2 resolve, but zero servers is fatal because the tunnel has nothing to relay through.","triggerScenarios":"Instantiating the ipv6_tunnel Pteredor with server hostnames that all fail DNS resolution, or an empty/whitespace server list after dedup (remove_same_server returns []).","commonSituations":"DNS server blocking/failing the teredo server names, offline machine at startup, hostnames decommissioned over time, typo'd server names in config.","solutions":["Check DNS works: nslookup the teredo server hostnames; fix /etc/resolv.conf or the DNS server if not","Update the teredo server list to currently alive servers","Pre-resolve and pass literal IPs if DNS for these names is unreliable in your environment","Ensure network is up before constructing the tunnel"],"exampleFix":null,"handlingStrategy":"validation","validationCode":"import socket\nservers = ['teredo.remlab.net', 'teredo.iks-jena.de']\nalive = [s for s in servers if socket.gethostbyname(s)]\nif not alive:\n    raise RuntimeError('No teredo server resolves; fix DNS before starting tunnel')","typeGuard":null,"tryCatchPattern":"try:\n    tunnel = Pteredor(server_list=servers)\nexcept Exception as e:\n    if 'could not be resolved' in str(e):\n        fix_dns_or_pass_ips()\n        tunnel = Pteredor(server_list=resolved_ips)\n    else:\n        raise","preventionTips":["Resolve server hostnames (or hardcode IPs) before constructing the tunnel","Run a DNS health check at startup on tunnel components","Keep the teredo server list current; servers disappear over time"],"tags":["ipv6","teredo","dns","startup"],"backgroundTag":"dns-resolution-failed","analyzedSha":"cfa5bc17b67676e467f37ec50766127e0ab5f0aa","analyzedAt":"2026-08-27T19:28:28.225Z","schemaVersion":2},"datasetVersion":"2026-08-28T00:17:15.603Z"}