用RAMHost的MiniVPS架设VPN和Squid代理

突然之間翻牆就成了必備技能之一。
我用RAMHost的Mini VPS嘗試了幾種翻牆的方式。
操作系統是Debian 5.0。

通過VPN翻牆 – OpenVPN+Tunnelblick

全局都翻牆且不用設置瀏覽器,客戶端一點就可以。

具體步驟參考RAMHost用戶論壇的第四個帖子。唯一需要注意的是第四步在/etc/rc.local中加入自動重啟OpenVPN的命令。這還真是必須的,因為/dev/tun會在重啟的時候丟掉,可能是OpenVZ的原因吧。

# restart openvpn after 1 hour in case tun device got broken on reboot
sleep 3600
/etc/init.d/openvpn stop
sleep 10
/etc/init.d/openvpn start

我使用Tunnelblick做客戶端來連VPN。
下載安裝後,需要將openvpn.conf放在如下位置~/Library/Application Support/Tunnelblick/Configurations/openvpn.conf中引用的.crt和.key也放這裡即可。

當晚(其實大概天快亮了-_-!)試過看HuluYoutube等高清視頻很流暢。

好處多多,壞處就是得拷貝那几個證書文件給客戶端。(更喜歡PPTP要求用戶名密碼的方式,但OpenVZ不支持。)

代理服務器 – Squid

GFW是強大的,直接用Squid仍然會被墻。

更安全的代理服務器 – Squid+Stunnel

請教了一下Fantix,他用Stunnel給Squid加密的方法來解決這個問題。

我用的Squid3,需要啟用lenny-backports才能找到。其實默認的Squid2.7也可以。裝好後,默認配置就能用。

sudo apt-get install squid3

簡化版的配置如下:

visible_hostname proxy.sunliwen.com
cache_effective_user proxy proxy
http_port 3128
acl localnet src 127.0.0.0/24
http_access allow localnet
sudo /etc/init.d/squid3 start

因為我要用Stunnel加密,所以只允許本地訪問。
配置Stunnel之前先測試一下Squid是否可以走通。

export HTTP_PROXY=http://localhost:3128
elinks www.youtube.com

配置服務器端Stunnel(可參考這篇博客)

主要有以下幾個步驟:

  1. 生成證書
sudo openssl genrsa -out privkey.pem 2048
sudo openssl req -new -x509 -key privkey.pem -out cacert.pem -days 1095
sudo cat privkey.pem cacert.pem >> /etc/stunnel/stunnel.pem
  1. 更改證書屬性
sudo chmod 0400 /etc/stunnel/stunnel.pem
  1. 更改chroot目錄的owner
sudo chown stunnel4:stunnel4 /var/run/stunnel4
  1. /etc/stunnel/stunnel.conf編輯如下
cert = /etc/stunnel/stunnel.pem
chroot = /var/lib/stunnel4/
pid = /stunnel4.pid
setuid = stunnel4
setgid = stunnel4
; debug = 7
; output = /var/log/stunnel4/stunnel.log
client = no
[http]
accept = 8080
connect = localhost:3128

客戶端也需要安裝stunnel,這裡是MacOSX

sudo port install stunnel

然後在客戶端本地運行

sudo stunnel3 -c -d localhost:8080 -r proxy.sunliwen.com:8080

或者創建包含如下內容的配置文件 stunnel.conf (我這立的位置在 /opt/local/etc/stunnel/stunnel.conf )

client = yes
[proxy]
accept = 127.0.0.1:8080
connect = proxy.sunliwen.com:8080

然後 http://localhost:8080 便成了一個安全的代理。

比較

前者比較方便,但不是很穩定,鏈接會自動斷開,重新鏈接VPN可以恢復。
後者需要在瀏覽器上進行設置,但比較穩定,沒出過什麼問題。

兩種方法速度差不多,都比裸的Squid慢。

PS:Hulu - 通過VPN可以看,Squid代理卻不行。
後者具體情況是,在播放完廣告之後報告一個錯

Sorry, we are unable to stream this video. Please check your Internet connection and try again.

點“reload the video”,重新放了一遍廣告,錯誤依舊。可能Hulu已經不僅僅在播放前查IP了

标签: , , , ,

  • image72

    或许我应该试下本地的cygwin ssh server => plink 转发到socket,供应所有程序使用

    • http://sunliwen.com Liwen

      恩,ssh更简单一些~

  • image72

    只有一台电脑供我使用,所有希望能够能同时实现server & client形成回路. 让所有的网络连接来通过代理加密后传出

    • http://sunliwen.com Liwen

      你是想让你的电脑作为加密代理吧?那就没有必要在同一台机器上再配client了呀。
      不过作为client咱俩的配置有两个地方不同:
      1 我的client配置里没有写cert和key这两行
      2 且有一行[proxy]作为名字

      Good luck.

  • image72

    你好,请问:
    我使用了privoxy (全部默认 端口8118,好像并没什么作用),stunnel 来加密我的访问
    stunnel 设置:
    cert = stunnel.pem
    key = stunnel.pem

    client=yes
    accept = 1984
    connect = 127.0.0.1:8118

    浏览器的代理设置地址是127.0.0.1:1984

    为什么一直都没反应啊 ?

    • http://sunliwen.com Liwen

      connect = 127.0.0.1:8118

      这句应该连接代理服务器而不是本地ip。再试试看。

  • https://www.google.com/profiles/104341441926187367538 tonytzhou

    RAMHost那个不是每小时重启OpenVPN吧
    只是在开机后一小时后要重启(因为开机的时候tun是不能用的,OpenVPN会无法运行)
    说起来是属于in case的 如果有OpenVPN就重启服务 没的话就启动

    • http://sunliwen.com Liwen

      已改正!

  • http://xiaobin.net/ Robin

    关于Hulu,好像是因为他们用的不是HTTP协议来下载flv,而是用rtmp协议的方式。