我自己实在是受不了国内访问GitHub垃圾速度了,于是就摸了一个脚本。

由于GitHub已经进了名单了,所以下面的服务器不能搭载国外了。
因此我把服务器放在局域网内了,其实用docker更好,只不过docker会修改服务器的内容,要安装些东西,暂时不用这种方式吧。
下面脚本和Windows的ip请使用你自建的服务端内网ip。

学校实验室路由器不允许动,由于我要到处跑,经常修改IP也不现实,因此旁路由(透明代理)也不太合适。
由于我不需要太极限的网速,只要能访问GitHub就行了,就有了下面的方案。
还有一个原因是我透明代理一直没搭建成功

自建服务端

准备

我是给局域网内的服务器使用的,所以我在笔记本上开了一个VMware,然后安装Ubuntu20.04。

记得要关闭你服务器网卡的IPv6,以免解析出ipv6地址后还尝试连过去。

为了后面配置方便,请使用Ubuntu20.04

Ubuntu安装proxychains

apt-get install -y proxychains

修改配置文件/etc/proxychains.conf最后一行,改成

socks5  127.0.0.1 10808

这里的127.0.0.1是你局域网开代理的电脑ip
使用方法是:

proxychains apt update

在本机电脑上用v2访问外网,开启socks5代理。
通过以上操作,可以在Ubuntu终端上访问到github,但并不方便。因此还需要安装sniproxy和v2客户端

你可以先安装这个软件,再在本地另一台Windows使用v2软件,然后用那个机器的ip进行代理安装linux版客户端。

还可以这样用:

apt-get install screen
proxychains screen

这样新窗口的命令就都走了代理。也方便后文从GitHub进行安装。
记得后面安装完成后再把配置IP修改过来。
还要关闭ufw:

ufw disable

还需要设置时区

sudo timedatectl set-timezone Asia/Shanghai

安装smartdns

以解决dns污染,毕竟proxychains不能解决dns污染
先禁用Ubuntu自带的dns缓存服务,systemd-resolved会导致Ubuntu系统下smartdns莫名其妙起不来(其实是因为占用了53端口):

systemctl stop systemd-resolved
systemctl disable systemd-resolved

下载配套安装包smartdns.xxxxxxxx.arm-debian-all.deb,并上传到Linux系统中。 执行如下命令安装

dpkg -i smartdns.xxxxxxxx.arm-debian-all.deb

x86系统下载配套安装包smartdns.xxxxxxxx.x86_64-linux-all.tar.gz, 并上传到Linux系统中。 执行如下命令安装

tar zxf smartdns.xxxxxxxx.x86_64-linux-all.tar.gz
cd smartdns
chmod +x ./install
./install -i

修改配置

安装完成后,可配置smartdns的上游服务器信息。具体配置参数参考配置参数说明。
一般情况下,只需要增加server [IP]:port, server-tcp [IP]:port配置项, 尽可能配置多个上游DNS服务器,包括国内外的服务器。配置参数请查看配置参数章节。

nano /etc/smartdns/smartdns.conf

将下面的内容直接添加到末尾就行了:

server 223.5.5.5
server-tls 8.8.4.4
server-tls 1.0.0.1
server-https https://cloudflare-dns.com/dns-query
server-https https://dns.google.com/query
server-https https://doh.powerdns.org
server-https https://dns.rubyfish.cn/dns-query
server-https https://doh.dns.sb/dns-query

为了稳定性,建议完全禁用ipv6解析:

force-AAAA-SOA yes

启动服务

systemctl enable smartdns
systemctl start smartdns

将DNS请求转发的SmartDNS解析。
启动不起来就查看日志:

cat /var/log/smartdns.log

修改本地路由器的DNS服务器,将DNS服务器配置为SmartDNS。
或者修改系统的dns为127.0.0.1

使用nslookup -querytype=ptr smartdns查询域名
看命令结果中的name项目是否显示为smartdns或主机名,如smartdns则表示生效

pi@raspberrypi:~/code/smartdns_build $ nslookup -querytype=ptr smartdns
Server:         192.168.1.1
Address:        192.168.1.1#53

Non-authoritative answer:
smartdns        name = smartdns.

为了兼容v2.0
还需要在/lib/systemd/system/smartdns.service内的[Service]下,新增ExecStartPost=/bin/sh -c 'chmod 644 /run/smartdns.pid'
还需要在nano /etc/smartdns/smartdns.conf内,新增bind-tcp [::]:5454


安装v2 ubuntu客户端

ooo自行替换成ray

使用fhs-install脚本安装。
导入配置文件,位置是:

/usr/local/etc/v2ooo/config.json

然后就可以使用了。
千万别手动指定dns服务器,尤其是别手动指定你本地的smartdns,本地解析的最优结果毫无卵用还有可能有污染。
加入 SmartDNS 其实主要是用来恶心那些 Up 主 和 小白们的
配置文件可以用v2客户端生成
启动

systemctl start v2ooo

停止

systemctl stop v2ooo

重启

systemctl restart v2ooo

记得把上面的配置文件/etc/proxychains.conf最后一行IP修改一下。

安装docker版本v2

使用脚本安装不方便升级,这里我使用秋水的容器来使用,先创建代理配置文件
创建 dockerd 相关的 systemd 目录,这个目录下的配置将覆盖 dockerd 的默认配置

sudo mkdir -p /etc/systemd/system/docker.service.d

新建配置文件 /etc/systemd/system/docker.service.d/http-proxy.conf,这个文件中将包含环境变量

[Service]
Environment="HTTP_PROXY=http://proxy.example.com:80"
Environment="HTTPS_PROXY=https://proxy.example.com:443"

如果你自己建了私有的镜像仓库,需要 dockerd 绕过代理服务器直连,那么配置 NO_PROXY 变量:

[Service]
Environment="HTTP_PROXY=http://proxy.example.com:80"
Environment="HTTPS_PROXY=https://proxy.example.com:443"
Environment="NO_PROXY=your-registry.com,10.10.10.10,*.example.com"

多个 NO_PROXY 变量的值用逗号分隔,而且可以使用通配符(),极端情况下,如果 NO_PROXY=,那么所有请求都将不通过代理服务器。

重新加载配置文件,重启 dockerd

sudo systemctl daemon-reload
sudo systemctl restart docker

检查确认环境变量已经正确配置:

sudo systemctl show --property=Environment docker

从 docker info 的结果中查看配置项。
然后拉取镜像

docker pull teddysun/xray

拉取完成后删除systemd配置

rm -rf /etc/systemd/system/docker.service.d

sudo systemctl daemon-reload
sudo systemctl restart docker

将v2的配置导出,存入/etc/xray文件下,命名为config.json

docker run -d -p 10808:10808 --name xray --restart=always -v /etc/xray:/etc/xray teddysun/xray

安装sniproxy

Ubuntu可以直接安装:

apt-get install sniproxy

配置文件位置在/etc/sniproxy.conf

把下面内容覆盖进去:

user daemon
pidfile /var/tmp/sniproxy.pid

error_log {
    syslog daemon
    priority notice
}

resolver {
    nameserver 127.0.0.1
    mode ipv4_only
}
listener 0.0.0.0:80 {
    proto http
    access_log {
        filename /var/log/sniproxy/http_access.log
        priority notice
    }
}
listener 0.0.0.0:443 {
    proto tls
    access_log {
        filename /var/log/sniproxy/https_access.log
        priority notice
    }
}

table {

    .*amazonaws\.com$ *
    .*github\.com$ *
    .*githubusercontent\.com$ *
    .*fastly\.net$ *
    .*cnpmjs\.org$ *
    .*npmjs\.com$ *
    .*cnpmjs\.org$ *
    .*nodesource\.com$ *


}

如果服务器在内网,还可以用泛反向代理,指的是所有请求 SNI Proxy 的域名都会反向代理。

echo -e "user daemon
pidfile /var/run/sniproxy.pid
 
listen 443 {
 proto tls
 table https_hosts
 access_log {
  filename /var/log/sniproxy/https_access.log
  priority notice
 }
}
table https_hosts {
 .* *:443
}" > /etc/sniproxy.conf

开机启动

由于需要使用proxychains,因此需要手动创建启动项:

nano /etc/systemd/system/proxy-sni.service

内容是:

[Unit]
Description=proxy-sni
After=network.target
After=v2ooo.service

[Service]
Type=simple
User=root
WorkingDirectory=/home/
ExecStart=proxychains sniproxy -c /etc/sniproxy.conf -f
Restart=on-failure

[Install]
WantedBy=multi-user.target

使用

linux

sudo su
wget -N  --no-check-certificate https://ax9advmduxh0.compat.objectstorage.us-phoenix-1.oraclecloud.com/US/%E5%B7%A5%E5%85%B7/%E8%84%9A%E6%9C%AC/auto-hosts.sh -O auto-hosts.sh && chmod +x auto-hosts.sh  && bash auto-hosts.sh

windows&mac

192.168.126.134 github-cloud.s3.amazonaws.com
192.168.126.134 github.com
192.168.126.134 raw.githubusercontent.com 
192.168.126.134 github.global.ssl.fastly.net  
192.168.126.134 assets-cdn.github.com 
192.168.126.134 documentcloud.github.com 
192.168.126.134 gist.github.com 
192.168.126.134 help.github.com 
192.168.126.134 nodeload.github.com 
192.168.126.134 raw.github.com 
192.168.126.134 status.github.com 
192.168.126.134 training.github.com 
192.168.126.134 www.github.com 
192.168.126.134 avatars0.githubusercontent.com
192.168.126.134 avatars1.githubusercontent.com 
192.168.126.134 codeload.github.com 
192.168.126.134 github-releases.githubusercontent.com
  
192.168.126.134 registry.cnpmjs.org
192.168.126.134 registry.npmjs.com
192.168.126.134 r.cnpmjs.org
192.168.126.134 rpm.nodesource.com


192.168.126.134 pypi.python.org
192.168.126.134 pypi.org
192.168.126.134 files.pythonhosted.org

检查

测试可以服务器可以访问下载GitHub的文件同时,要查看日志运行情况:

root@ubuntu:/home/ubuntu# systemctl status proxy-sni
● proxy-sni.service - proxy-sni
     Loaded: loaded (/etc/systemd/system/proxy-sni.service; enabled; vendor preset: enabled)
     Active: active (running) since Wed 2021-05-05 05:05:41 CST; 1min 26s ago
   Main PID: 779 (sniproxy)
      Tasks: 2 (limit: 2280)
     Memory: 1.1M
     CGroup: /system.slice/proxy-sni.service
             ├─779 sniproxy -c /etc/sniproxy.conf -f
             └─789 sniproxy -c /etc/sniproxy.conf -f

5月 05 05:05:41 ubuntu systemd[1]: Started proxy-sni.
5月 05 05:05:41 ubuntu proxychains[779]: ProxyChains-3.1 (http://proxychains.sf.net)
5月 05 05:07:02 ubuntu proxychains[779]: |S-chain|-<>-127.0.0.1:10808-<><>-13.229.188.59:443-<><>-OK

如果觉得太麻烦了的话,还可以用我的vmware克隆下来的系统。

最后修改:2023 年 09 月 01 日
如果觉得我的文章对你有用,请随意赞赏