计算机 · 2021年8月12日 0

Cross the Great Wall

因为上Google的需要,不得不翻墙。经常是找到一种方法用一段时间然后用不了,然后又不得不大量地百度科学上网的方法。对于像我这样健忘的人来说与其不停地“重蹈覆辙”,不如系统性地总结一下科学上网的方法。常见的翻墙方法基本上都是基于代理的方法的,不用代理的话大概就是修改DNS了。

SSH转发

通过ssh翻墙最方便,稳定性也还可以。

  1. 首先设置好SSH转发
  • Windows下:
    可以使用Tunnelier。选择 Services 选项,将 SOCKS / HTTP Proxy Forwarding 设置为EnabledListen Interface 设置为本机地址(如127.0.0.1)Listen Port 任取。
  • Linux下:
    在使用ssh命令连接主机的时候加上-D:\选项。
  1. 在浏览器中设置选择刚才设置好的代理:
    选择SOCKSV5 ,地址填127.0.0.1,端口号填刚才确定的端口号,即可开始使用ssh代理上网。

基于PPTP协议的VPN

貌似也有基于L2TP协议的VPN,不过当初尝试时按照别人的教程只在PPTP这种协议上试成功了,所以这里就只写这一种。点此阅读原教程,或者阅读下面的转载。

准备工作

启用TUN-TAP

安装PPTP服务

    apt-get update
    apt-get install pptpd

配置PPTP服务

  1. 设置localipremoteip
    /etc/pptpd.conf:

localip 192.168.0.1

#remoteip 192.168.0.234-238, 192.168.0.245
#or
#localip 192.168.0.234-238, 192.168.0.245
#remoteip 192.168.1.234-238, 192.168.1.245

去掉前两行或者最后两行的”#”以启用

  1. 配置dns服务器
    etc/ppp/pptpd-options 中设置dns服务器

ms-dns 8.8.8.8

#ms-dns 8.8.4.4

根据需要去掉其中一行的”#”

  1. 添加用户
    /etc/ppp/chap-secrets:

client server secret IP addresses

Robin pptpd abcd *

* 表示用户Robin的IP地址是任意给的.

  1. 设置iptable
    /etc/sysctl.conf:

net.ipv4.ip_forward=1

去掉这一行的”#”以启用

   sysctl -p # load the new sysctl.conf
   iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o venet0 -j MASQUERADE
   iptables -F FORWARD
   iptables -A FORWARD -p udp --dport 53 -j ACCEPT
   iptables -A FORWARD -p tcp --dport 1723 -j ACCEPT
   iptables -A FORWARD -p gre -j ACCEPT
   iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
  1. 启用或者重启服务
   /etc/init.d/pptpd restart  

或者

   service pptpd restart  
  1. 如果有时候用着用着这个vpn不工作了,那么照上面步骤再重来一次。我一般都是重复第4、5步。

基于ShadowSocks的VPN

ShadowSocks的作者是天朝的女程序员cloudwindy

安装

shadowsocks.org说的是通过pip安装,Ubuntu16.04直接apt就可以安装了。

使用

  • 服务器端(可以访问到外网的那一端)
    服务器端使用ssserver命令,例子:
  ssserver -p 12345 -k 23456 -m "aes-256-cfb"

完整的选项列表以及各选项的具体含义可以查看命令的usage

  • 客户端(本地端)
    本地端使用sslocal命令,例子:
  sslocal -s your.domain.name -p 12345 -k 23456 -l 34567 -m "aes-256-cfb"

-l选项表示的是本地监听端口。

最后将浏览器或系统代理设置为使用本地地址和此端口的SOCKS5代理。
可以配合nohup命令让服务器端或者客户端一直在后台跑,以及可以把ShadowSocks的各种选项都存在配置文件里,然后使用-c选项指定配置文件。比如客户端配置文件config.json如下:

{
        "server":"your.server.domain",
                "server_port":12345,
                "local_port":34567,
                "password":"your-pass-word",
                "timeout":3000,
                "method":"aes-256-cfb"
}

然后每次开机后只需要执行下面的命令:

nohup sslocal -c config.json &

如果连这个都还觉得麻烦的话,可以将这句话加到机器开机运行的脚本里面去。

SwitchyOmega

SwitchyOmega是Chrome浏览器上的一个插件,可以用来管理各种代理。这个插件最方便的地方在于其auto switch情景模式,可以设置规则让浏览器在访问不同的网站时使用不同的服务器,而且这个规则列表可以来自于网上、可以在线更新(只需要提供该规则列表的url)。
一个针对GFW的规则列表网址(规则列表格式:AutoProxy):https://raw.githubusercontent.com/gfwlist/gfwlist/master/gfwlist.txt。

用Openvpn搭建vpn

难以想象,以前居然连vpn和proxy的区别都没搞明白。简而言之,使用proxy时应用是需要知道存在proxy这个东西的,而使用vpn时应用是不知道vpn的存在的。
按照这篇来自于Digital Ocean的教程可以搭建OpenVpn以及生成相应的客户端文件。

WireGuard

  1. 先apt安装WireGuard
  2. 在服务器与客户端上分别生成密钥
   wg genkey > private
  1. 在服务器端与客户端分别添加wg interface
   ip link add dev wg0 type wireguard
  1. 设置wg interface的ip地址 客户端:
   ip address add dev wg0 192.168.2.1/24

服务器端:

   ip address add dev wg0 192.168.2.2/24
  1. 设置服务器端与客户段各自的私钥
   wg set wg0 private-key ./private
  1. 在服务器端与客户端启动wg interface
   ip link set wg0 up
  1. 在服务器端与客户端分别执行wg可以看到各自的公玥和监听端口
  2. 在客户端添加