前言
最近尝试在一台远程服务器上使用 Copilot,结果提示报错无法连接 Github。
[ERROR] [default] [2023-06-28T02:25:41.892Z] GitHub Copilot could not connect to server. Extension activation failed: "getaddrinfo EAI_AGAIN api.github.com"
第一直觉是本来就无法访问,但是测试了一下 ping 居然能 ping 通。就很离奇。在这里简单记录一下 debug 的过程。
正文
首先用 nslookup github.com 命令来检查。
nslookup github.com
如果提示找不到 nslookup 可以用下面的命令安装。
apt install dnsutils
nslookup 在我这边的输出是:
Server: 10.223.20.32
Address: 10.223.20.32#53
** server can't find github.com: REFUSED
果然是 DNS 配置有问题,直接给我 refused 了。
因为我使用 SSH 连接没有开 GUI,下面介绍命令行修改 DNS 配置的方法。
打开 `/etc/resolv.conf`,检查内容。
nameserver 10.223.20.32
search 4e24-4b25-a292.svc.cluster.local svc.cluster.local cluster.local
options ndots:5
关于 `/etc/resolv.conf` 的内容详细解析可以自行搜索。
第一行是 DNS 服务器,第二行是 DNS 配置 query 的,第三行表示“the minimum number of dots a domain name can have, which makes the resolver query it as an absolute domain name.”(好难翻译,参见 The /etc/resolv.conf File | Baeldung on Linux)
基本的思路就是估计这个 DNS 服务器只配置了基本的内网的 DNS,也不会向外网发出请求。而我们的服务器是可以ping通外网的,所以直接在后面加一个 8.8.8.8 的 DNS 服务器试试。
nameserver 8.8.8.8
为了防止本来内网的一些服务受影响,我没有删去原有的部分。
然后应该问题就解决了。
wget https://github.com
发现可以正常访问了,Copilot 的报错也消失了。