shell-设置网络代理
上一级页面:index-windows
前言
我们配置proxy是用在编程学习环境的,所以这里主要介绍命令行工具的设置代理方式
国内的大环境下,部分地区的DNS服务器会无差别墙掉外网的所有ip地址,所以国内开发者配置网络代理是伴随着您设置每一项环境的。
如果您使用Windows环境,我推荐使用 Git-Bash作为shell工具,
这里探讨的过程是十分曲折的,过程见git-连接远程服务器的代理方案.
编写脚本的过程十分曲折,详情见如何获取宿主主机ip地址并设置http-proxy
设置windows shell代理脚本
在Windows下工作的Git-Bash,使用了Windows的mingw64等环境,模拟实现了Linux shell的大部分功能,
git-Bash的配置文件
gitBash有许多用于不同功能的配置文件,具体见lhajh.github.io
这里直接给出最终的配置脚本,以下是笔者开关代理的脚本, 在终端使用 proxy
/ unproxy
命令即可 开启/关闭 代理 :
首先新建一个文件~/.shellfunction
vim ~/.shellfunction
以此填入下列内容:
首先设置宿主主机的IP,
# 设置主机物理IP,see https://lamirs.vercel.app/wsl-or-wsl2-设置网络代理/
# 在下面3种方式中,选择一种方式取消注释
# 普通Linux环境/Git-Bash/windows主机等
# export HOST_IP=127.0.0.1
# only-WSL2,使用wsl2的服务来获取IP
# export HOST_IP=$(grep -oP '(?<=nameserver\ ).*' /etc/resolv.conf)
# linux/windows/git-bash/wsl2,使用docker提供的内置服务器host.docker.internal
# see https://docs.docker.com/desktop/windows/networking/
# export HOST_IP=http://host.docker.internal
并设置你的代理软件端口和代理地址环境变量
#设置代理端口,具体的端口视你电脑本地的代理软件(Shadowsocks、Clash等)而异
export HOST_PORT=1080
#设置代理地址
export PORXY_ADDR="http://${HOST_IP}:${HOST_PORT}"
然后填写这个shell 脚本,
# PROXY FOR APT
function proxy_apt() {
# make sure apt.conf existed
sudo touch /etc/apt/apt.conf
sudo sed -i '/^Acquire::https\?::Proxy/d' /etc/apt/apt.conf
# add proxy
echo -e "Acquire::http::Proxy \"$PORXY_ADDR\";\nAcquire::https::Proxy \"$PORXY_ADDR\";" | sudo tee -a /etc/apt/apt.conf >/dev/null
echo "current apt proxy status: using $PORXY_ADDR, proxying"
}
function unproxy_apt() {
sudo sed -i '/^Acquire::https\?::Proxy/d' /etc/apt/apt.conf
echo "current apt proxy status: direct connect, not proxying"
}
# PROXY FOR NPM
function proxy_yarn() {
yarn config set proxy $PORXY_ADDR
yarn config set https-proxy $PORXY_ADDR
npm config set proxy $PORXY_ADDR
npm config set https-proxy $PORXY_ADDR
}
function unproxy_yarn() {
yarn config delete proxy
yarn config delete https-proxy
npm config delete proxy
npm config delete https-proxy
}
function proxy_npm() {
proxy_yarn
}
function unproxy_npm() {
unproxy_yarn
}
然后填写docker的代理
# if docker is not running, then start docker service
# if docker running, then `:`, else `sudo service docker start`
# The `:` Do nothing beyond expanding arguments and performing redirections. The return status is zero.
# https://www.gnu.org/software/bash/manual/html_node/Bourne-Shell-Builtins.html#Bourne-Shell-Builtins
# 仅linux 使用
# ps -C dockerd 1>/dev/null && : || sudo service docker start 1>/dev/null
# PROXY FOR DOCKER
function proxy_docker() {
# make sure /etc/default/docker existed
sudo touch /etc/default/docker
sudo sed -i '/^export https\?_proxy/Id' /etc/default/docker
# add proxy
echo -e "export http_proxy=\"$PORXY_ADDR\";
export https_proxy=\"$PORXY_ADDR\";
export HTTP_PROXY=\"$PORXY_ADDR\";
export HTTPS_PROXY=\"$PORXY_ADDR\";" | sudo tee -a /etc/default/docker >/dev/null &&
sudo service docker restart &&
echo "current docker proxy status: using $PORXY_ADDR, proxying"
}
function unproxy_docker() {
# sudo sed -i '/^Acquire::https\?::Proxy/d' /etc/apt/apt.conf
# 删除代理设置
sudo sed -i '/^export https\?_proxy/Id' /etc/default/docker &&
sudo service docker restart &&
echo "current docker proxy status: direct connect, not proxying"
}
然后填写其他的全局的代理
# GLOBAL PROXY FOR ZSH,bash,git-bash
# if ~/.shell_proxy not exist , then create it.
if [ ! -f ~/.shell_proxy ]; then
touch ~/.shell_proxy
fi
function proxy() {
echo -e "export {all_proxy,http_proxy,https_proxy,ALL_PROXY,HTTP_PROXY,HTTPS_PROXY}=\"$PORXY_ADDR\";" | tee ~/.shell_proxy >/dev/null
# apply
. ~/.shell_proxy
# declare
echo "current proxy status: using $PORXY_ADDR, proxying"
}
function unproxy() {
# unset all_proxy http_proxy https_proxy ALL_PROXY HTTP_PROXY HTTPS_PROXY
echo -e "unset all_proxy http_proxy https_proxy ALL_PROXY HTTP_PROXY HTTPS_PROXY" | tee ~/.shell_proxy >/dev/null
# apply
. ~/.shell_proxy
# declare
echo "current proxy status: direct connect, not proxying"
}
function proxy_all() {
# proxy shell like bash zsh
# proxy program like idea
proxy
proxy_apt
# proxy npm & yarn
proxy_yarn
proxy_docker
}
function unproxy_all() {
# unproxy shell like bash zsh
# unproxy program like idea
unproxy
unproxy_apt
# unproxy npm & yarn
unproxy_yarn
unproxy_docker
}
然后设置自动全部代理
# 自动代理
proxy_all &>/dev/null
然后在~/.profile
文件末尾中添加
(具体是什么文件,由你的shell 决定,比如git bash对应的是~/.bash_profile
)
vim ~/.bash_profile
# 在`~/.bash_profile`文件末尾中添加
source ~/.shellfunction
git-连接远程服务器的代理方案
详细配置过程见git-连接远程服务器的代理方案.
Windows下配置代理的本地环境变量
部分软件会使用到这个环境变量,用来确定用户默认的代理服务器
http_proxy
http://127.0.0.1:7890
https_proxy
http://127.0.0.1:7890
科学上网URL
Clash 常用客户端使用教程(简易版). 有钱,没Android,没PC,用Surge,不用Clash | by Flinty Lemming | Medium
Releases · Fndroid/clash_for_windows_pkg
史上最稳科学上网姿势-宝塔+v2+ws+tls+cdn | 元洪博客
https://raw.githubusercontent.com/gfwlist/gfwlist/master/gfwlist.txt
acgpanda/SS-and-SSR-Collection: ss,ssr,v2ray软件的个人向收集,不定期更新
https://raw.githubusercontent.com/petronny/gfwlist2pac/master/gfwlist.pac
https://raw.githubusercontent.com/ACL4SSR/ACL4SSR/master/fullgfwlist.acl
ACL4SSR/ACL4SSR: SSR 去广告ACL规则/SS完整GFWList规则/Clash规则碎片,Telegram频道订阅地址
https://raw.githubusercontent.com/ACL4SSR/ACL4SSR/master/gfwlist-user.rule
DNS检测 解决使用github速度慢(速度快了好多)__Alexander的博客-CSDN博客_github dns
petronny/gfwlist2pac: Automatically convert gfwlist to pac everyday
gfwlist/gfwlist: The one and only one gfwlist here
FQrabbit/SSTap-Rule: 支持更多游戏规则,让SSTap成为真正的“网游加速器”
GFWList · FelisCatus/SwitchyOmega Wiki
Proxifier 中文版下载 3.42 标准版 汉化版下载 → 汉化新世纪
Proxifier: 将SS/SSR转为自定义真全局性代理 | Leonn 的博客
Proxifier配合Shadowsocks实现全局代理 - flyzy小站
ssr,ss,v2ray 相关: dns修改方法,以解决相关稳定问题及谷歌或有些检测vpn的网站会提示当前国家不为代理所在国的原因及解决办法。提高隐私及固定好ip位置,更好的玩游戏。
东方网络 ~ Wonderful Network Service.
GettingTapWindows – OpenVPN Community