国内服务器设置代理及docker容器使用代理

乘着良心云活动,买了一台国内2核4g的轻量云,国内的服务器上不了外网是一个很头疼的问题,git,docker,npm等等都拉不了。而且这些有的仅支持http代理,有些仅支持socks代理,各种乱七八糟的也有点乱,然后在加上docker容器也要设置代理,设置全局代理还是使用宿主机代理。。。

1、v2还算是比较有意思的,同时支持http和socks5代理,而且inbounds可以有多个入站代理方式。

一份v2客户端inbounds设置:其他部分的配置如果自己不会写可以从一些第三方客户端导出。

"inbounds": [
    {
      "tag": "proxy",
      "port": 1080,
      "listen": "127.0.0.1", //监听本机
      "protocol": "socks", //socks5代理
      "sniffing": {
        "enabled": true,
        "destOverride": [
          "http", "tls"
        ]
      },
      "settings": {
        "auth": "noauth",
        "network": "tcp,udp"
      }
    },
    {
      "tag": "proxy-docker",
      "port": 1089,
      "listen": "172.17.0.1", //监听容器
      "protocol": "socks", //socks5代理
      "sniffing": {
        "enabled": true,
        "destOverride": [
          "http", "tls"
        ]
      },
      "settings": {
        "auth": "noauth",
        "network": "tcp,udp"
      }
    },
    {
      "listen": "127.0.0.1", //监听本机
      "port": 8080,
      "protocol": "http", //http代理
      "sniffing": {
        "enabled": true,
        "destOverride": [
         "http", "tls"
        ]
      },
      "settings": {
      "network": "tcp,udp",
        "auth": "noauth"
      },
      "tag": "http"
    },
    {
      "listen": "172.17.0.1", //监听容器
      "port": 8090,
      "protocol": "http", //http代理
      "sniffing": {
        "enabled": true,
        "destOverride": [
         "http", "tls"
        ]
      },
      "settings": {
      "network": "tcp,udp",
        "auth": "noauth"
      },
      "tag": "http-docker"
    }
  ]

虽然直接监听0.0.0.0可以比较方便一点,但是不太推荐,可能不需要走代理的全走了代理,浪费也容易被监控。

监听127.0.0.1,是在宿主机服务器里使用,设置http和socks代理,需要用哪个就用哪个。

监听172.17.0.1,是docker容器里使用,docker网桥默认是这个,可以使用ifconfig查看一下,也是设置http和socks代理,所有容器都可以使用这个代理。

分开监听不同代理协议,这样就可以需要用哪个协议就用哪个协议,分流也方便。

端口根据自己的需求修改。

2、linux服务器设置代理。稍微比较简单,后台跑一个v2,然后设置一下代理即可。

配置文件config.json,自己不懂写,就从一些客户端导出来就可以了,注意一下要是配置里有api相关的内容要删掉。

mkdir /root/v2ray
cd /root/v2ray

#拉取代码,建议自己拉到本地,在上传。直接可能无法下载。
wget https://github.com/v2fly/v2ray-core/releases/download/v5.0.3/v2ray-linux-64.zip
unzip v2ray-linux-64.zip

#运行,自己可以用systemd或者screen等等后台运行。
/root/v2ray/v2ray run -c /root/config.json

然后终端设置全局代理:

#添加环境变量
vim /etc/profile

#添加,http和socks5这两个选一个。
export http_proxy="http://127.0.0.1:8080"
export https_proxy="https://127.0.0.1:8080"
#export http_proxy="socks5://127.0.0.1:1080"
#export https_proxy="socks5://127.0.0.1:1080"

#生效
source /etc/profile

#测试,不管是http还是socks5都是ping不了的。
curl google.com

3、设置全局代理也有很多麻烦的是,比如wget,git,pip,npm,apt等等支持的代理协议不一定相同,设置全局代理之后可能出错。就可以单独设置代理:

#apt设置代理
vim /etc/apt/apt.conf

添加
Acquire::http::proxy "http://127.0.0.1:8080/";
Acquire::https::proxy "https://127.0.0.1:8080/";

#git设置代理
git config --global http.proxy 'socks5://127.0.0.1:1080'
git config --global https.proxy 'socks5://127.0.0.1:1080'
# 使用

git config --global --unset http.proxy
git config --global --unset https.proxy
# 取消

#wget设置代理
vim /etc/wgetrc

#添加
https_proxy = http://127.0.0.1:8080
http_proxy = http://127.0.0.1:8080

4、docker容器走代理,设置全局代理的方法也有一些,网上相关教程比较多,就多说了。如果使用第一步的inbounds,docker就可以直接使用宿主机里的代理。

http_proxy="http://172.17.0.1:8090"
https_proxy="https://172.17.0.1:8090"
http_proxy="socks5://127.0.0.1:1089"
https_proxy="socks5://127.0.0.1:1089"

就根据不同情况该怎么用就怎么用,比如想设置全局代理:

export ALL_PROXY='socks5://172.17.0.1:1089'

比如青龙容器,自己试过多次,自带的ql bot应该是用不了socks代理,就可以使用http代理。

比如pagermaid人行字走机器人,docker一键拉下来所有依赖很方便,也不用把自己服务器搞的乱七八糟的。但是这个机器人不支持htttp代理,所以只能使用socks5代理,修改config.yml配置文件添加socks5代理即可。。

评论 5

  1. Merkin

    小白看得似懂非懂,请问有成体系的教程吗,谢谢

    • zsxwz

      一个系列的教程都写的话要写很多很多。哪里不了解的可以姿势群聊交流。然后再慢慢写。

      • zsxwz

        简单来说就是主机监听127.0.0.1,docker容器监听172.17.0.1

  2. 猪猪大神

    clash 可以代理吗,想用容器代理到本机的clash上一直没有成功

    • zsxwz

      clash也是同理,docker里要代理,clash就要设置代理监听172.17.0.1。宿主机要代理clash就要设置代理监听127.0.0.1

留言

* - 必填