1and0
V2EX  ›  Ubuntu

ubuntu 有办法让终端走 proxy 吗?

  •  
  •   1and0 · May 5, 2020 · 5874 views
    This topic created in 2200 days ago, the information mentioned may be changed or developed.
    ubuntu 设置了系统级的 proxy,但是自带终端不走,添加了 export http_proxy=socks5:********后,能从 google 下载 gpg 了,不过 k8s 的镜像拉不下来。

    为什么系统级的代理对终端不生效?
    54 replies    2020-05-06 16:10:27 +08:00
    diggerdu
        1
    diggerdu  
       May 5, 2020 via iPhone   ❤️ 5
    proxychains
    polaa
        2
    polaa  
       May 5, 2020   ❤️ 1
    http_proxy 哎 然后你设置个 socks5 ???
    burringcat
        3
    burringcat  
       May 5, 2020 via Android   ❤️ 1
    “系统级”代理是指 gnome shell 的代理吗
    burringcat
        4
    burringcat  
       May 5, 2020 via Android
    K8s 下载应该是用它的守护进程,应该是要配它的 systemd 文件或者其他配置文件
    VDimos
        5
    VDimos  
       May 5, 2020 via Android
    proxychains,不过还是有些许问题,比如 nvm 就没办法代理
    caesarwoo
        6
    caesarwoo  
       May 5, 2020   ❤️ 2
    GNOME 所谓的系统级代理是指在 env 中加入 http_proxy https_proxy 。 对于不支持代理环境变量读取的程序,可以考虑套一层 proxychains 。如果要使用最彻底的代理的话,建议直接用 iptables 进行流量转发透明代理。
    halfcrazy
        7
    halfcrazy  
       May 5, 2020
    docker 的 daemon.json 里配一个阿里的 registry 就行。
    Kobayashi
        8
    Kobayashi  
       May 5, 2020 via Android
    有图形界面试试 mellow 。https://github.com/mellow-io/mellow
    oahebky
        9
    oahebky  
       May 5, 2020   ❤️ 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  
       May 5, 2020 via Android
    不同工具代理方式不一样,9 楼正解
    isir1234
        11
    isir1234  
       May 5, 2020
    我是拉的阿里云镜像然后打官方镜像的 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  
       May 5, 2020 via iPhone
    有,看我之前帖子
    shenfu1991
        13
    shenfu1991  
       May 5, 2020 via iPhone   ❤️ 1
    @shenfu1991 #12 错了,不是帖子,之前有人问过一样的问题,搜索一下
    huazhuhotels
        14
    huazhuhotels  
       May 5, 2020
    privoxy

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

    https://github.com/rofl0r/proxychains-ng
    huobazi
        28
    huobazi  
       May 5, 2020
    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  
       May 5, 2020
    @ysc3839 ...好吧 之前 socks5 都是走 all_proxy 的
    HytonightYX
        30
    HytonightYX  
       May 5, 2020   ❤️ 1
    写入 bashrc 或者 zshrc

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

    随后需要代理敲 setproxy,关闭就 unsetproxy
    itgoyo
        31
    itgoyo  
       May 5, 2020
    proxychains
    wdlth
        32
    wdlth  
       May 5, 2020
    docker 是以服务形式运行的,要在 systemd 的配置加 Environment 设置环境变量。
    gleport
        33
    gleport  
       May 5, 2020
    proxychains 对 Go 编译出来的无效。docker 可以参考 https://github.com/hmgle/graftcp/issues/14
    ronman
        34
    ronman  
       May 5, 2020 via Android
    @polaa ???本来不就是这样设置吗
    polaa
        35
    polaa  
       May 5, 2020
    @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  
       May 5, 2020 via Android
    @polaa 是这样的,相当于把终端的 http 通过本机的 socks 来代理,后面可以是多种协议,只要你本地有
    toptyloo
        37
    toptyloo  
       May 5, 2020
    安利 Graftcp
    DefoliationM
        38
    DefoliationM  
       May 5, 2020
    http proxy 你搞个 socks5 协议都对不上
    tinkerer
        39
    tinkerer  
       May 5, 2020 via Android
    tsocks
    ByteCat
        40
    ByteCat  
       May 5, 2020
    lixingcong
        41
    lixingcong  
       May 5, 2020
    ss-redir+iptables+chinaroute
    love
        42
    love  
       May 5, 2020
    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  
       May 5, 2020
    $ 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  
       May 5, 2020
    关键词 网络流量转发 终端
    illusionist
        45
    illusionist  
       May 5, 2020 via iPhone
    13 楼的就可以了,我自己用的就是这个,包括拖 Android AOSP 两百多 G 的 mirror 镜像代码,都是 OK 的。
    wangbenjun5
        46
    wangbenjun5  
       May 5, 2020
    其实很多人说的已经很明白了,在 Linux 下不是所有应用都走系统代理的,其实 Windows 也一样,比如 chrome 默认是走系统代理,但是 Firefox 则需要单独设置,具体问题具体分析,docker 这种复杂应用,必然也是有自己单独的配置选项
    darknoll
        47
    darknoll  
       May 5, 2020 via Android
    是 all_proxy
    feelinglucky
        48
    feelinglucky  
       May 5, 2020
    关于 K8s 拉不下来的话,可以参考我前几天整理的 Guide

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

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

    1. 如果程序支持代理,最简单的是设置环境变量比如 all_proxy, http_proxy
    2. 如果程序不支持环境变量设置代理,或者不知道它读的是哪个变量,支持哪个协议,用 proxhchains,通过劫持 libc API 实现,只支持 TCP
    3. 如果上面都不行,最后还有 mellow,通过 TUN/TAP 来实现,基本上可以强制代理所有的程序
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5476 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 214ms · UTC 08:48 · PVG 16:48 · LAX 01:48 · JFK 04:48
    ♥ Do have faith in what you're doing.