每天进步一点点:使用SSH转发将树莓派改造成内网专用socks代理机

还记得我那个超老旧的树莓派一代Model B嘛?给它装上系统,用网线连到路由器上,并且设置静态IP后,就那么一直开机空跑呢。

image.png
(图源 :pixabay)

用它做点啥好呢?我陷入了深深的思索当中:对于老旧的硬件来讲,感觉实在是鸡肋——食之无味,弃之可惜。

想到这两天正在弄的在Linux命令行设置socks代理以及在Windows浏览器上设置代理,突发奇想,何不将树莓派改造成专门的socks代理机器?

这样需要爱国上网的时候,我直接通过这个树莓派连接外网就好了,当然了,只有树莓派还不行,还必须有个外网的机器,否则就没法爱国上网啦。

也就是说数据链如下:

本地机器<---(socks5)--->树莓派<---(ssh)--->VPS<---(http/https)--->Intelnet

完美!

其实老早以前就分享过使用SSH动态转发实现SOCKS5代理并用其登录Telegram的相关内容。

那时候的数据链是这样的:

本地机器<---(socks5)--->VPS<---(http/https)--->Intelnet

实现起来也很简单,还记得SSH的三种转发类型嘛?分别为:

  • 动态转发:-D [bind_address:]port
  • 本地转发:-L [bind_address:]port:host:hostport
  • 远程转发:-R [bind_address:]port:host:hostport

而实现socks代理使用的是其中的动态转发-D功能,只需在VPS上执行如下指令即可:

ssh -D IP:1234 [email protected]

如果需要上述SSH在后台运行以及不执行远程指令(仅转发),那么需要加上-f以及-N参数,想了解相关信息的朋友,可以自己去查看手册(man ssh),这里就不再赘述了。

那么你可能要问,这不是解决问题了嘛?没啥新内容啊?你还写个什么劲呀?

别急,上述代理实现方式,有个大问题,就是这是个开放的代理,不需要用户名密码,谁都可以访问。如果被代理猎手之类的扫描到了,可能被人拿来做一些坏事,那就悲催了。

虽然可以通过iptables之类的来进行访问控制,奈何我本地的IP是动态分配的,变来变去,用起来那将会极度不便。所以当年我试过这个方案后就没在继续使用。

新方案其实和上述方案大同小异,不过在上述方案中,是在VPS上执行,连接的是VPS本身上的SSH账户。而新方案则是在树莓派上执行,连接的是远程VPS上的用户。

执行指令如下:

ssh -D *:1234 -C -N -f -p vps_port vps_user@vps_ip

其中几个参数解释如下:

  • -D 使用动态转发
  • -C启用压缩
  • -N 不执行远程指令
  • -f后台运行
  • -p 指定端口号(默认22端口则不需要这个参数)

*:1234*代表的意义:

The bind_address of “localhost” indicates that the listening port be bound for local use only, while an empty address or ‘*’ indicates that the port should be available from all interfaces.

简单来讲就是,使用 “localhost”,那么这个代理只能在树莓派本身上使用;而使用 ‘*’ ,那么其它机器也可以连它啦。其实就是127.0.0.10.0.0.0的区别。

在树莓派上执行上述指令,然后在Firefox中设置相应的代理信息,测试访问一下Google,Youtube,一切正常!

Reveal spoiler

image.png

你可能会问,这不是还没有密码嘛?和之前的方案有啥区别?

那区别可大了去了,举个例子吧,这就好比,你把门锁坏了且装满金条的保险柜放大街上以及把这个保险柜放家里的区别。(^_^)

简单来讲,虽然这次的socks代理也没密码,但是只有我家里的机器可以连接上,所以几乎就没什么风险的啦。

不过等等,我的保险柜呢?我的金条呢?怎么都不见了呢?被谁搬走啦?😡

相关链接

Sort:  

这几天没有出门溜娃,天天在家里敲码。
娃不拖你出门么?😁😂😂😂

不敢出门呀,外边全是小洋人

虽然我看不懂,不过还是从头到尾一字不差的看了一遍🙈,O哥👍

新年快乐,O哥。