参考:
- https://blog.csdn.net/weixin_41831919/article/details/113061317
- https://www.yuncongz.com/archives/1.html
- https://blog.csdn.net/aoc68397/article/details/101893369
环境:ubuntu 18.04
机器1: IP 219.216.65.252 (可以访问外网)
机器2: IP 202.199.6.202
目标: 让机器2通过机器1连上外网
什么是TinyProxy
Tinyproxy 是一个轻量级的 HTTP/HTTPS 代理服务器,设计简单且占用资源少,适合在内存和 CPU 资源有限的环境中运行。它的主要用途是作为网络间的中介,允许客户端通过它访问互联网资源,从而可以进行缓存、过滤、匿名和其他功能。
安装
sudo apt-get update
sudo apt-get install tinyproxy
配置(在机器1)
-
修改端口和允许远程连接的IP:
sudo vim /etc/tinyproxy/tinyproxy.conf
Port 8888
#预设是8888 Port
,你可以更改,我改成了9999
Allow 127.0.0.1
#将127.0.0.1改成你自己的IP
#例如你的IP 是1.2.3.4,你改成Allow 1.2.3.4,那只有你才可以连上这个Proxy
#若你想任何IP都可以脸到Proxy在Allow前面打#注释$ cat /etc/tinyproxy/tinyproxy.conf |grep .*Port.* # Port: Specify the port which tinyproxy will listen on. Please note #Port 8888 Port 9999
Logfile (必须) 日志文件, 默认/var/log/tinyproxy/tinyproxy.log
,在 LogFile 文件不存在时会警告,不会运行失败。具体设置的值可以通过命令在配置文件中查找:
$ sudo cat /etc/tinyproxy/tinyproxy.conf |grep .*pid.*PidFile "/run/tinyproxy/tinyproxy.pid"
-
查看端口是否开放(应该和下面的一样):
$ netstat -ltnp |grep .*9999.* tcp 0 0 0.0.0.0:9999 0.0.0.0:* LISTEN 7611/tinyproxy tcp6 0 0 :::9999 :::* LISTEN 7611/tinyproxy
如果没有打开,则使用iptables命令放开9999端口规则:
iptables -I INPUT -p tcp --dport 9999 -j ACCEPT
再次用上面的命令测试即可。
参考: https://blog.csdn.net/weixin_41831919/article/details/113061317 -
启动代理(在机器1)
# 启动 service tinyproxy start # 重启 sudo service tinyproxy restart # 关闭 sudo service tinyproxy stop
测试
机器1上测试
# 本地
$ curl http://httpbin.org/get?show_env=1
{"args": {"show_env": "1"}, "headers": {"Accept": "*/*", "Host": "httpbin.org", "User-Agent": "curl/7.78.0", "X-Amzn-Trace-Id": "Root=1-664318e8-70126aea75c7a1c23c94e1a4", "X-Forwarded-For": "219.216.65.252", "X-Forwarded-Port": "80", "X-Forwarded-Proto": "http"}, "origin": "219.216.65.252", "url": "http://httpbin.org/get?show_env=1"
}
# 本地使用代理, 可以执行export http_proxy=''来清空
$ export http_proxy='219.216.65.252:9999'
$ curl http://httpbin.org/get?show_env=1
$ # 或者直接: curl -x 219.216.65.252:9999 http://httpbin.org/get?show_env=1
{"args": {"show_env": "1"}, "headers": {"Accept": "*/*", "Host": "httpbin.org", "User-Agent": "curl/7.78.0", "Via": "1.1 tinyproxy (tinyproxy/1.8.4)", "X-Amzn-Trace-Id": "Root=1-66431b0e-2bb370e5133d103260f0a670", "X-Forwarded-For": "219.216.65.252", "X-Forwarded-Port": "80", "X-Forwarded-Proto": "http"}, "origin": "219.216.65.252", "url": "http://httpbin.org/get?show_env=1"
}
在机器2上测试
# 另一台机器上测试
$ curl -x 219.216.65.252:9999 http://httpbin.org/get?show_env=1
{"args": {"show_env": "1"}, "headers": {"Accept": "*/*", "Host": "httpbin.org", "User-Agent": "curl/7.68.0", "Via": "1.1 tinyproxy (tinyproxy/1.8.4)", "X-Amzn-Trace-Id": "Root=1-66436e27-7b0e8400044872ed2ad4b3c9", "X-Forwarded-For": "219.216.65.252", "X-Forwarded-Port": "80", "X-Forwarded-Proto": "http"}, "origin": "219.216.65.252", "url": "http://httpbin.org/get?show_env=1"
}
对于机器2可以参考如下三种配置方法:
有三种常用方式:
①永久设置:
vim /etc/profile:
export http_proxy=‘http://代理服务器IP:端口号’
export https_proxy=‘http://代理服务器IP:端口号’
source /etc/profile
②临时设置(重连后失效):
也可以直接运行export http_proxy='http://代理服务器IP:端口号
export https_proxy=‘http://代理服务器IP:端口号’
注意:设置之后可能使用ping时还是无法连接外网,但是pip时可以的,因为ping的协议不一样不能使用这个代理
③单次设置:
直接在pip时设置代理也是可以的:
pip install -r requirements.txt --proxy=代理服务器IP:端口号
————————————————
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/king_cpp_py/article/details/81192387
之后主机B的pip,conda,apt均可使用。
一些问题
$ service tinyproxy start
Failed to add /run/systemd/ask-password to directory watch: No space left on device:
参考:https://askubuntu.com/questions/828779/failed-to-add-run-systemd-ask-password-to-directory-watch-no-space-left-on-dev
由于watch
数据数量被限制了。
使用root
身份,立即修复是运行:
cat /proc/sys/fs/inotify/max_user_watches
echo 1048576 > /proc/sys/fs/inotify/max_user_watches
生产更多watch。
长期修复方法是编辑文件/etc/sysctl.conf
以包含以下行:
fs.inotify.max_user_watches=1048576