V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
1and0
V2EX  ›  Ubuntu

ubuntu 有办法让终端走 proxy 吗?

  •  
  •   1and0 · 2020-05-05 01:28:04 +08:00 · 4568 次点击
    这是一个创建于 1698 天前的主题,其中的信息可能已经有所发展或是发生改变。
    ubuntu 设置了系统级的 proxy,但是自带终端不走,添加了 export http_proxy=socks5:********后,能从 google 下载 gpg 了,不过 k8s 的镜像拉不下来。

    为什么系统级的代理对终端不生效?
    54 条回复    2020-05-06 16:10:27 +08:00
    diggerdu
        1
    diggerdu  
       2020-05-05 01:32:03 +08:00 via iPhone   ❤️ 5
    proxychains
    polaa
        2
    polaa  
       2020-05-05 01:33:44 +08:00   ❤️ 1
    http_proxy 哎 然后你设置个 socks5 ???
    burringcat
        3
    burringcat  
       2020-05-05 01:34:24 +08:00 via Android   ❤️ 1
    “系统级”代理是指 gnome shell 的代理吗
    burringcat
        4
    burringcat  
       2020-05-05 01:36:38 +08:00 via Android
    K8s 下载应该是用它的守护进程,应该是要配它的 systemd 文件或者其他配置文件
    VDimos
        5
    VDimos  
       2020-05-05 01:36:59 +08:00 via Android
    proxychains,不过还是有些许问题,比如 nvm 就没办法代理
    caesarwoo
        6
    caesarwoo  
       2020-05-05 01:39:46 +08:00   ❤️ 2
    GNOME 所谓的系统级代理是指在 env 中加入 http_proxy https_proxy 。 对于不支持代理环境变量读取的程序,可以考虑套一层 proxychains 。如果要使用最彻底的代理的话,建议直接用 iptables 进行流量转发透明代理。
    halfcrazy
        7
    halfcrazy  
       2020-05-05 02:01:22 +08:00
    docker 的 daemon.json 里配一个阿里的 registry 就行。
    Kobayashi
        8
    Kobayashi  
       2020-05-05 02:08:35 +08:00 via Android
    有图形界面试试 mellow 。https://github.com/mellow-io/mellow
    oahebky
        9
    oahebky  
       2020-05-05 02:16:58 +08:00   ❤️ 1
    不同的工具,环境变量是不一样的。

    基于 python 的是 all_proxy
    wget 是 http_proxy 和 https_proxy.
    git 可以用 -c "http.proxy=..."

    所以说让终端走代理是可以的(主机运行的要开启局域网可用)。
    但是配置的方法要对。

    docker 的话配阿里的 register 就可以,这里是一篇简单的教程:
    [ [docker] 阿里云镜像加速]( https://blog.csdn.net/qq_29757283/article/details/105740109)

    至于 docker 用什么环境变量 -- 我没用过,我已经把方法说了。
    lionseun
        10
    lionseun  
       2020-05-05 08:44:04 +08:00 via Android
    不同工具代理方式不一样,9 楼正解
    isir1234
        11
    isir1234  
       2020-05-05 08:52:11 +08:00
    我是拉的阿里云镜像然后打官方镜像的 tag, 一步到位.

    sudo apt update && sudo apt install -y apt-transport-https curl
    curl -s https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | sudo apt-key add -
    echo "deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
    sudo apt update && sudo apt install -y kubelet kubectl kubeadm

    KUBE_VER=$(kubeadm version -o short)
    IMAGE_MIRROR="registry.cn-hangzhou.aliyuncs.com/google_containers"
    kubeadm config images list >/tmp/ki
    images=$(tail -n7 /tmp/ki | tr "\/" "\n" | awk '!(NR%2)')
    for imageName in ${images[@]}; do
    docker pull ${IMAGE_MIRROR}/${imageName}
    docker tag ${IMAGE_MIRROR}/${imageName} k8s.gcr.io/${imageName}
    docker rmi ${IMAGE_MIRROR}/${imageName}
    done
    shenfu1991
        12
    shenfu1991  
       2020-05-05 09:37:13 +08:00 via iPhone
    有,看我之前帖子
    shenfu1991
        13
    shenfu1991  
       2020-05-05 09:40:04 +08:00 via iPhone   ❤️ 1
    @shenfu1991 #12 错了,不是帖子,之前有人问过一样的问题,搜索一下
    huazhuhotels
        14
    huazhuhotels  
       2020-05-05 09:43:18 +08:00
    privoxy

    export http_proxy
    wujunzero
        15
    wujunzero  
       2020-05-05 09:56:34 +08:00
    all_proxy=sock5, 顺便写个脚本放 rc 里。
    tankren
        16
    tankren  
       2020-05-05 10:13:14 +08:00
    proxychains, 但是对 docker 无效
    conn4575
        17
    conn4575  
       2020-05-05 10:25:20 +08:00 via Android   ❤️ 2
    曾经我也折腾这些代理,后来我换路由器了,GTMD 局域网
    luassuns
        18
    luassuns  
       2020-05-05 10:27:16 +08:00 via iPhone
    还可以全局透明代理,v2ray 可用 qv2ray
    ossphil
        19
    ossphil  
       2020-05-05 10:27:40 +08:00
    用 socks5h,还有设置的 all_proxy 代理对 apt 不起作用,应该写成
    sudo apt -o Acquire::http::proxy="socks5h://${PROXY_SOCKS5}/" install
    这样的形式
    optional
        20
    optional  
       2020-05-05 10:52:57 +08:00
    docker 的命令只是个 rpc 请求,真正的网络在 dockerd 进程里面, 不过 pull 这需求像上面说的一样只要加一个 registry 就行。
    elfive
        21
    elfive  
       2020-05-05 10:53:10 +08:00 via iPhone
    export HTTP_PROXY=http://0.0.0.0:0000
    export HTTPS_PROXY=http://0.0.0.0:0000
    两句话解决
    venpong
        22
    venpong  
       2020-05-05 12:33:03 +08:00
    别折腾了,加个路由器吧。
    liuminghao233
        23
    liuminghao233  
       2020-05-05 12:38:44 +08:00 via iPhone
    用 dsvpn
    ysc3839
        24
    ysc3839  
       2020-05-05 12:39:45 +08:00 via Android
    @polaa 没问题,http_proxy 指的是 http 协议的请求使用这个代理服务器。socks5 是代理服务器的协议。
    ysc3839
        25
    ysc3839  
       2020-05-05 12:41:10 +08:00 via Android
    @oahebky 没记错的话 Python 也支持 http_proxy 和 https_proxy,git 底层使用的是 curl,也可以用环境变量配置代理。
    drackzy
        26
    drackzy  
       2020-05-05 12:42:22 +08:00
    proxychains zsh, 然后这个新的 zsh shell 基本都走代理了
    liuxu
        27
    liuxu  
       2020-05-05 12:49:17 +08:00
    具体问题我忘记了,几年前 proxychains 出过问题,功能有缺陷,所以换成了 proxychains-ng,修复了那个问题

    https://github.com/rofl0r/proxychains-ng
    huobazi
        28
    huobazi  
       2020-05-05 13:10:45 +08:00
    0. 安装 polipo, ref :https://github.com/jech/polipo
    2. 设置 polipo
    ```
    https://github.com/huobazi/dotfiles/blob/master/polipo

    3. 切换脚本, ref https://github.com/huobazi/dotfiles/blob/master/zshrc
    ```bash
    # proxy setting
    function unproxy(){
    unset http_proxy https_proxy HTTP_PROXY HTTPS_PROXY all_proxy ALL_PROXY
    echo -e "\033[0;32m Proxy off ...\033[0m"
    curl cip.cc
    }
    function proxy() {
    export no_proxy="localhost,127.0.0.1,localaddress,.localdomain.com"
    export http_proxy="http://127.0.0.1:1090" https_proxy=$http_proxy HTTP_PROXY=$http_proxy HTTPS_PROXY=$http_proxy all_proxy=$http_proxy ALL_PROXY=$http_proxy
    echo -e "\033[0;32m Proxy on ...\033[0m"
    curl cip.cc
    }
    ```
    polaa
        29
    polaa  
       2020-05-05 13:41:34 +08:00
    @ysc3839 ...好吧 之前 socks5 都是走 all_proxy 的
    HytonightYX
        30
    HytonightYX  
       2020-05-05 14:03:27 +08:00   ❤️ 1
    写入 bashrc 或者 zshrc

    alias setproxy="export ALL_PROXY=socks5://127.0.0.1:XXXX"
    alias unsetproxy="unset ALL_PROXY"

    随后需要代理敲 setproxy,关闭就 unsetproxy
    itgoyo
        31
    itgoyo  
       2020-05-05 14:10:00 +08:00
    proxychains
    wdlth
        32
    wdlth  
       2020-05-05 14:12:04 +08:00
    docker 是以服务形式运行的,要在 systemd 的配置加 Environment 设置环境变量。
    gleport
        33
    gleport  
       2020-05-05 14:17:27 +08:00
    proxychains 对 Go 编译出来的无效。docker 可以参考 https://github.com/hmgle/graftcp/issues/14
    ronman
        34
    ronman  
       2020-05-05 14:36:08 +08:00 via Android
    @polaa ???本来不就是这样设置吗
    polaa
        35
    polaa  
       2020-05-05 14:38:45 +08:00
    @ronman 哈哈哈 我也不知道啊 我一般都是 export https_proxy=http://127.0.0.1:7890 http_proxy=http://127.0.0.1:7890 all_proxy=socks5://127.0.0.1:7891 但是楼上说 socks5 也可以那样
    ronman
        36
    ronman  
       2020-05-05 15:25:10 +08:00 via Android
    @polaa 是这样的,相当于把终端的 http 通过本机的 socks 来代理,后面可以是多种协议,只要你本地有
    toptyloo
        37
    toptyloo  
       2020-05-05 15:42:41 +08:00
    安利 Graftcp
    DefoliationM
        38
    DefoliationM  
       2020-05-05 15:57:18 +08:00
    http proxy 你搞个 socks5 协议都对不上
    tinkerer
        39
    tinkerer  
       2020-05-05 16:13:00 +08:00 via Android
    tsocks
    ByteCat
        40
    ByteCat  
       2020-05-05 17:23:38 +08:00
    lixingcong
        41
    lixingcong  
       2020-05-05 17:31:32 +08:00
    ss-redir+iptables+chinaroute
    love
        42
    love  
       2020-05-05 17:40:59 +08:00
    http proxy 都说是 http 了,你给了一个 socks5 ?
    如果只有 socks5,用个工具转一下成 http proxy,比如 gost

    我平时是建了个文件比如 proxy.sh
    export http_proxy=http://localhost:8123
    export https_proxy=http://localhost:8123

    需要用代理时打一行
    . ~/proxy.sh
    就可以了
    my3157
        43
    my3157  
       2020-05-05 18:18:26 +08:00
    $ which proxy
    proxy () {
    export http_proxy="http://127.0.0.1:8123"
    export https_proxy="http://127.0.0.1:8123"
    }

    $ which unproxy
    unproxy () {
    unset http_proxy
    unset https_proxy
    }
    charlie21
        44
    charlie21  
       2020-05-05 21:47:28 +08:00
    关键词 网络流量转发 终端
    illusionist
        45
    illusionist  
       2020-05-05 21:51:22 +08:00 via iPhone
    13 楼的就可以了,我自己用的就是这个,包括拖 Android AOSP 两百多 G 的 mirror 镜像代码,都是 OK 的。
    wangbenjun5
        46
    wangbenjun5  
       2020-05-05 22:02:33 +08:00
    其实很多人说的已经很明白了,在 Linux 下不是所有应用都走系统代理的,其实 Windows 也一样,比如 chrome 默认是走系统代理,但是 Firefox 则需要单独设置,具体问题具体分析,docker 这种复杂应用,必然也是有自己单独的配置选项
    darknoll
        47
    darknoll  
       2020-05-05 22:17:44 +08:00 via Android
    是 all_proxy
    feelinglucky
        48
    feelinglucky  
       2020-05-05 23:17:30 +08:00
    关于 K8s 拉不下来的话,可以参考我前几天整理的 Guide

    https://github.com/mingcheng/deploy-k8s-within-aliyun-mirror

    话说国内的环境太差了,逼人科学访问网络,和谐用语
    stkevintan
        49
    stkevintan  
       2020-05-05 23:22:48 +08:00 via Android
    你需要透明代理: https://github.com/mellow-io/mellow
    milkpuff
        50
    milkpuff  
       2020-05-05 23:37:15 +08:00
    楼上说的 privoxy 可以,刚用过。
    ctro15547
        51
    ctro15547  
       2020-05-05 23:58:45 +08:00
    proxychains 这个挺好用的
    fox0001
        52
    fox0001  
       2020-05-06 00:25:32 +08:00 via Android
    @tinkerer #39 我也习惯用 tsocks
    gleport
        53
    gleport  
       2020-05-06 09:04:42 +08:00
    浏览了上面的回复,发现不少人对设置代理这方面存在误解。比如:
    设置环境变量 http_proxy=socks5:********。有人提到需要配置 HTTP 协议的而不是 sock5,其实这完全取决于要运行的这个程序认不认,很多软件是支持这种方式的。https://twitter.com/chenshaoju/status/1181780020345233408 这里也提到了。设置环境变量的方法是把选择权完全交给要运行的程序,具有一定局限性。程序读取什么名字的环境变量,怎么转换就是它自己的事情了,有些程序是不支持的。
    zerow0w
        54
    zerow0w  
       2020-05-06 16:10:27 +08:00
    总结下上面提到的:

    1. 如果程序支持代理,最简单的是设置环境变量比如 all_proxy, http_proxy
    2. 如果程序不支持环境变量设置代理,或者不知道它读的是哪个变量,支持哪个协议,用 proxhchains,通过劫持 libc API 实现,只支持 TCP
    3. 如果上面都不行,最后还有 mellow,通过 TUN/TAP 来实现,基本上可以强制代理所有的程序
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2550 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 04:27 · PVG 12:27 · LAX 20:27 · JFK 23:27
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.