oflyhigh avatar

每天进步一点点:在Linux命令行设置代理,Socks5与Socks5h的区别

oflyhigh

Published: 21 Dec 2022 › Updated: 21 Dec 2022每天进步一点点:在Linux命令行设置代理,Socks5与Socks5h的区别

每天进步一点点:在Linux命令行设置代理,Socks5与Socks5h的区别

这段时间经常被一个问题困扰,就是我本地Linux机器无法访问一些网站(原因是众所周知的),导致一些事情只能在服务器上操作。

image.png
(图源 :pixabay)

于是我想了一个办法,就是用一台树莓派做了个代理,然后在本地机器上设置通过代理访问网络,这样貌似可以解决问题。

Linux 命令行下设置代理

先来说如何在Linux命令行下设置代理,好像相关的工具有很多,比如说connect-proxy以及proxychains等。不过我有洁癖,不喜欢在系统中随随便便装一些软件包。

那么是否有不用安装软件,就可以在Linux命令行下通过代理访问网络呢?答案是有的。

比如说,使用类似如下命令:

curl -x socks5://ip:port https://baidu.com

其中ip、port是我socks5代理对应的信息。

<html>
<head><title>302 Found</title></head>
<body bgcolor="white">
<center><h1>302 Found</h1></center>
<hr><center>bfe/1.0.8.18</center>
</body>
</html>

上述请求会返回如上内容(亦即重定向请求),说明我代理是生效着的。

然而有些工具并没有类似curl中的-x这样的代理选项,那要如何让其通过代理访问网络呢?

答案是,我们只需在命令行下执行如下命令即可:

export http_proxy=socks5://ip:port
export https_proxy=$http_proxy

这样,命令行中的所有http以及https流量都会通过代理访问,比如上述的curl指令就可以省却其中的-x选项。

上述命令在终端断开后即会失效,每次开启终端都要重新设置一下,我们可以将其加入.bashrc中,这样每次登录就会自动生效啦。

Socks5与Socks5h的区别

搞明白了在命令行下设置代理,显然是一件让人无比开心的事情,然而,当我测试如下指令时,我就开心不起来了:

curl google.com

这个并没有任何返回信息,这是为啥呢?我百思不得其解。使用如下指令,同样没有响应:

curl -x socks5://ip:port https://google.com

但是在浏览器中设置代理,却可以正常访问Google,这是为啥呢?

我苦思冥想,浏览器中使用socks5代理,和命令行下使用scoks5代理,会有什么差异会导致一个能访问,一个不能访问呢?

思前想后,我想到唯一的差异,大概就是浏览器中除了代理,我还设置了DNS over HTTPS:
image.png

关闭相应选项后,果然无法通过浏览器访问Google啦,那么如何在命令行中也启用DNS over HTTPS呢?最终我发现,原来Sock5代理可以设置DNS走本地还是远程。

SOCKS5 with remote DNS (proxy_url='socks5h://...)
SOCKS5 with local DNS (proxy_url='socks5://...)

这条指令应该是工作的(socks5h):

curl -x socks5h://ip:port https://google.com

<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
<TITLE>301 Moved</TITLE></HEAD><BODY>
<H1>301 Moved</H1>
The document has moved
<A HREF="http://www.google.com/">here</A>.
</BODY></HTML>

上述指令果然成功地返回如上内容(301重定向)。

接下来,我们把命令行中设置代理的指令,修改成使用远程DNS,亦即:

export http_proxy=socks5h://ip:port
export https_proxy=$http_proxy

image.png
(图源 :pixabay)

困扰我很久的问题,终于完美解决啦,搞定收工。

相关链接

Leave 每天进步一点点:在Linux命令行设置代理,Socks5与Socks5h的区别 to:

Written by

Programmer, Maker, Freelancer, Witness. Make friends, Make money, Make life better!

Read more #cn posts


Best Posts From oflyhigh

We have not curated any of oflyhigh's posts yet. But you can encourage our curation team to review posts by visiting them regularly and by referring other readers. Because we give priority to frequently read content.

More Posts From oflyhigh