在 Oracle Cloud 搭建終身免費 VPN 服務

原文鏈接: https://www.jkg.tw/?p=3163 

甲骨文(Oracle)提供的永久免費雲運算服務,真的很吸引人阿!
最近看到甲骨文又開放永久免費使用的虛擬機,所以一口氣就去申請了四台

兩台在日本東京,兩台在美國西岸鳳凰城。。。🥺

機器的效能大約跟一台樹莓派 3 差不多,而且一個帳號可以開兩台虛擬機

每月還有 10TB 的流量,拿來搭一個 VPN 來用非常讚,如果是給自己使用的話是非常富餘的~

有需要了解更多甲骨文永久免費服務的話,可以去官網參考常見問題
日本東京跟韓國首爾的伺服器比較難搶,因為是亞洲線路,延遲比較低,所以非常搶手

我大約花了兩個多小時才搶到兩台東京,台灣中華電信晚上高峰 ping 過去大約 35ms 左右,還算蠻穩定的

甲骨文的韓國首爾伺服器大約在 75ms 左右,所以除非有特殊用途,不然亞洲開一個東京即可

美西鳳凰城則相對簡單,我美西兩台直接按下去就秒開了,運氣很好~

美西的 ping 則是大約在 170ms 左右,表現中規中矩

Google Outline

Outline 是一個開放原始碼的 VPN 工具,基於 ShadowSocks 基礎上開發的,有良好加密跟隱蔽性

官網上有一系列 GUI 軟體可以提供快速部屬伺服器跟全平台客戶端 App 可以安裝,而且是全免費的

廢話不多說,要部屬伺服器就先下載 Outline Manager App
Outline Manager 支援三種平台的自動快速部屬,其中 DigitalOcean 是需要另外購買的

Google Cloud Platform 跟 Amazon Web Services 這兩家都有提供新註冊免費使用一年的服務

最後一個「進階」是他們提供一個自動化安裝的腳本,指令貼到 Liunx 伺服器上就能一鍵安裝

其實腳本也就是幫你安裝 Docker 到部屬 Outline 的一系列動作,喜歡手工的人也可以自己來
雖然是手工安裝也是蠻簡單的,把上面指令全部複製下來,登入到伺服器貼上去執行即可
如上圖,執行指令過程會問你要不要安裝 docker,按下一次 y 即可

之後都是自動產生的,最後會跳一行綠色的,請把這行綠色的字串複製貼回 Outline Manager

但是在按下 Outline Manager 的「完成」以前我們要先打開端口與防火牆的設定

上圖最後有提到兩個端口,所以我們要先把機器上的端口打開
以上就開完本機的端口,接下來我們到甲骨文的虛擬機網站管理後台,去設定防火牆
找到虛擬機詳細資訊後,點「公用子網路」的藍色文字
如上圖,跟著點,進到安全清單內
新增傳入規則
新增完畢後,防火牆規則會立刻生效,此時回到電腦上的 Outline Manager 軟體上

按下「完成」的按鈕,他就會新增成功啦!
如上圖,最後按下「複製邀請說明」,就會把這個金鑰的連線資料複製下來

你只要透過聊天軟體或者電子郵件發到你其他設備上,或者給你朋友

依照連結提示安裝軟體,就能開始使用你熱騰騰部屬好的永久免費 VPN 了~


另外最後提醒一下,因為這免費虛擬機效率真的不太好,跑跑小東西試作一下實驗還可以

本篇這個 VPN 搭建起來,速度大約只到 30~40 Mbps 左右而已,正常瀏覽網頁或者看看 1080P 影片還能應付

但有大型下載應用還是建議使用其他虛擬機或者直接升級為付費機器囉~

还Shadowsocks一个清白


发这篇文章的原因基于品葱有大量的用户因为自己开的shadowsocks被封,机场三天两头用不了,或是在别的地方(例如v2ex)看到别人吹捧v2ray/ssrr 贬低shadowsocks。再加上党国爆出了一些所谓人工智能检测shadowsocks的论文,导致很多人认为shadowsocks已经是一个不安全的翻墙工具。因此在这里对shadowsocks配置做一个简单的科普。

先上结论,shadowsocks并没有失效,党国也没有手段来破解shadowsocks的加密,那篇基于lstm的人工智能论文在专业人士看来完全就是笑话,请敬请放心使用,如果你的ss用不了,请按照我以下列出的几部分一一进行检查:

【shadowsocks配置部分】

1、打开你的shadowsocks客户端,在加密那一栏里你会看到接近20种不同的加密算法,在其中可以粗略的分为AEAD加密和非AEAD加密,具体技术细节有兴趣了解的可以自行Google。结论就是现在请务必使用AEAD加密的算法(chacha20-ietf-poly1305、xchacha20-ietf-poly1305、aes-128-gcm、aes-192-gcm、aes-256-gcm),目前xchacha20-ietf-poly1305和aes-256-gcm是最佳的选择,由于各大平台的cpu现在对aes算法都有较好的优化,我个人推荐aes-256-gcm。

2、关于客户端的选择,应该去哪里下载shadowssocks客户端呢?答案是github,请不要去任何非github平台下载ss客户端(如果你买的机场不给你服务器相关信息,需要账号密码登录专用客户端,那就没办法了)。在这里要特别说一下iOS平台,iOS没有官方的shadowsocks客户端,很多免费应用都不支持AEAD算法,请买礼品卡在外区购买shadowrocket,或者使用免费的outline。

3、在自行配置shadowsocks服务器的时候,很多攻略仍然写的是基于Python的shadowsocks-server,请不要再参考这些攻略!!!基于python的那个版本已经三年没有更新了,很多教程甚至还在用五年前的2.8.2版,请尽快转用C语言的shadowsocks-libev,github地址:https://github.com/shadowsocks/shadowsocks-libev


【关于党国封禁shadowsocks服务器的策略】

1、当你shadowsocks发现用不了的时候,不要慌张,首先你要做的是排错,确定是哪部分出了问题。党国封杀服务器一般分为ip封杀和端口封杀,请务必先确认是服务器ip地址还是服务器ss端口被墙。要怎么确认呢?打开你电脑的cmd,先ping一下你的服务器地址,看看还通不通,如果发现是通的,使用命令 telnet 你的服务器地址 你的服务器端口(例如:telnet 1.1.1.1 8838)如果你服务器能ping通但是telnet你的服务器shadowsocks端口不通的时候,更换端口就可以了。

2、终于要提到党国的检测方式了,在文末我会放一篇相关文章来进行论证,在这里我还是只放出结论。党国封杀你服务器现在较为通用的方法是主动嗅探,举例来说,就是当发现一个让他怀疑的流量时,gfw会模拟一个shadowsocks请求发往你服务器的那个shadowsocks端口,由于密码是错的,这时候你的服务器会返还一个类似于密码错误的回包,这样gfw虽然无法连接你的服务器,但是他就可以猜测这台服务器是用来翻墙的。这就是主动嗅探的基本原理,只要你流量足够大,连接的人足够多,或者你服务器的ip是著名翻墙vps运行商(所谓脏ip),就有极大可能被封禁。在这里你可以看出,党国没有解密你的包,仍然无法知道你访问了什么网站,是不是真的用来翻墙,但是由于可能性很高,就被封禁了。

3、主动嗅探比起技术方式更像是一种社会工程学原理,无论什么样的翻墙技术手段,都会中招,并不是shadowsocks存在技术漏洞,而是党国对ss的回包已经很熟悉了而已。而这一点,我们完全可以通过技术手段进行避免。


【为你的服务器添加访问白名单】

1、如果你服务器只允许特定的ip进行访问,那党国防火墙的主动嗅探也就失去了作用,因为党国不知道你允许了哪些地址,所以它所有尝试嗅探的操作都会被你服务器的防火墙(以其人之道还治其人之身 笑)给拦下,相当于还没有到你ss服务已经被你的服务器给拦下来,这种拦截是不具备特征的,而在现实中各大公司的服务器也是这么操作的。例如你是不可能访问Google的内部服务器,因为Google限定了可访问机器的ip。

2、具体操作方法你可以使用iptables命令
iptables --append INPUT --protocol tcp --dport 1080 --jump DROP

先禁止所有人访问你的ss 1080端口
iptables --append INPUT --protocol tcp --src 1.1.1.1 --dport 1080 --jump ACCEPT

这条命令的意思是仅允许1.1.1.1访问你ss 1080端口
service iptables save
service iptables restart

记得保存和重启服务哦

3、我们现在都是动态ip,没有指定的地址要怎么办呢?事实上没办法,所以我建议你再开一台服务器做流量的转发,然后你ss服务器只允许你转发服务器的ip地址,如果说转发服务器在国内,就会形成一个点对点的ss访问,只有你转发服务器到你ss服务器之间过一次墙,流量又是两个固定ip之间在访问,对于隐蔽流量是大有裨益的,至于linux怎么配置端口转发这里就写不下了,欢迎Google。


【正文部分:Shadowsocks是如何被检测和封锁的】

这篇论文写的非常好,希望所有人都去看一看,对党国封锁机制做了很具体的实验


VPS搭建WireGuard服务端中文教程 可复活被墙IP

WireGuard简单介绍
*注意:*WireGuard 是通过 UDP 协议传输数据的,这意味着它可以搭建在被墙的服务器上使用,复活被墙IP
*同时:*因为是 UDP 传输的,所以也不怕被墙,锐速、BBR 这类TCP加速工具也不会对其起到加速作用。
*另外:*如果你当地运营商对海外 UDP 链接进行 QOS 限速,那么速度可能不如使用 TCP 链接的代理软件理想。

更少的代码
相比于 OpenVPN 、 IPSec 的几十万行代码,WireGuard 只有短短的四千行。

更容易部署
对于初次接触的人来说,相比于其他VPN协议,WireGuard 更容易部署。

更安全的加密
  • Curve25519 目前最高水平的秘钥交换算法。
  • ChaCha20 对称加解密算法,比 AES 更快更高效。
  • Poly1305 是一种 MAC (Message Authentication Code) 标准,用于验证数据的完整性和消息的真实性。
  • BLAKE2 一种更安全的 HASH 算法(类似的有 SHA1, SHA256, MD5)
  • SipHash24 另一种 HASH 算法。
  • HKDF 一种秘钥衍生算法。
因为其链接特性,所以 WireGuard 有很好的稳定性,无论你怎么切换网络 或者 网络波动导致断开后,往往可以很快恢复链接,所以如果拿来加速游戏的话,可能效果不错(当然前提是你的代理服务器也要网络不错)。

前提要求
  • **系统要求:**Debian 8 / 9、Ubuntu 14.04 / 16.04 / 18.04 / 18.10
  • **服务器要求:**OpenVZ 虚拟化的服务器不支持安装该VPN,其他虚拟化均可。这里我推荐使用 Hostwinds VPS主机,注册购买教程如下:

购买 Hostwinds VPS
Hostwinds 是一家美国主机商,成立于 2010 年,国内站长使用较多的是 Hostwinds 美国 VPS 主机产品。由于 Hostwinds 美国 VPS 主机采用的是 SSD 硬盘,而且所有方案都有全球 CDN 加速功能,因而也备受用户青睐。 如今 Hostwinds 主机商提供的产品方案也非常丰富,包括虚拟主机、云主机、VPS主机以及独立主机等。目前 Hostwinds 主要有达拉斯、西雅图 2 个数据中心,其中西雅图数据中心在国内访问速度最快。现在 Hostwinds 提供免费更换IP了,没错,就是免费,免费,随意更换,可以一键解决 IP 被墙的问题了。
首先确认不要使用任何代理,网络是什么 IP 就是什么 IP ,不然可能需要人工审核,导致 Hostwinds VPS 购买显示 "Pending" 状态, 不能即时创建服务激活。
1、通过 Hostwinds 优惠链接进入Hostwinds 首页,选择 “VPS” 下的 "Unmanaged VPS" ,这里是最便宜的**(注意千万不要选择页面上 3.29 美元那个,那个是虚拟空间,不是 VPS !!!)**。


3、进入信息填写页面后首先填写账号信息,一般是新用户我们填写左边的姓、名、邮箱、密码,然后点击 “Submit” 进入下一步,如下图所示:

4、页面跳转后填写用户信息,如下图所示:

5、然后选择购买时间、数据中心 、操作系统,红色部分需要自己选择,绿色一般我们默认,可以按月购买,但是建议第一次购买时间选择长一点,这样优惠要大很多,不然后面续费优惠力度就没有这么大了。 如下图所示:

6、默认是自动云备份的,如果不需要去掉勾选, 如下图所示:

7、然后选择付款方式,一般我们选择支付宝进行付款 (只有国内 IP 访问的时候才有支付宝付款方式),如下图所示:

8、最后确认价格(不同时期可能价格有些许不同,如果通过前面优惠链接点击购买会有优惠),勾选同意协议,然后点击“Complete Order”按钮进行下单, 如下图所示:

9、下单完成后订单结果如下图所示:

WireGuard安装步骤

配置PPA
首先如果你是 Ubuntu 14.04 系统,那么请先安装 PPA:
# 以下步骤仅限 Ubuntu 14.04 系统执行
apt update
apt install software-properties-common -y
安装完成后,我们还需要通过 PPA 工具添加 WireGuard 源:
add-apt-repository ppa:wireguard/wireguard
# 执行后提示如下示例内容(仅供参考):

root@doubi:~# add-apt-repository ppa:wireguard/wireguard
 WireGuard is a novel VPN that runs inside the Linux Kernel. This is the Ubuntu packaging for WireGuard. More info may be found at its website, listed below.

More info: https://www.wireguard.com/
Packages: wireguard wireguard-tools wireguard-dkms

Install with: $ apt install wireguard

For help, please contact 
 More info: https://launchpad.net/~wireguard/+archive/ubuntu/wireguard
Press [ENTER] to continue or ctrl-c to cancel adding it

# 这里会提示你是否继续,点击 回车键 继续,点击 Ctrl+C 键退出。
# 然后输出大概如下内容。

gpg: keyring '/tmp/tmp8bgitjjx/secring.gpg' created
gpg: keyring '/tmp/tmp8bgitjjx/pubring.gpg' created
gpg: requesting key 504A1A25 from hkp server keyserver.ubuntu.com
gpg: /tmp/tmp8bgitjjx/trustdb.gpg: trustdb created
gpg: key 504A1A25: public key "Launchpad PPA for wireguard-ppa" imported
gpg: Total number processed: 1
gpg:        imported: 1 (RSA: 1)
OK

# 以上为输出示例内容(仅供参考)

安装WireGuard
然后我们就可以开始安装 WireGuard 了。
# 更新一下软件包源
apt update

# 开始安装 WireGuard ,resolvconf 是用来指定DNS的,旧一些的系统可能没装。
apt install wireguard resolvconf -y

验证是否安装成功
当你通过上面的步骤安装完后,请用下面的代码验证一下是否安装成功。
lsmod | grep wireguard
# 执行该代码后,提示大概如下示例内容(仅供参考),第一行是必须要有的,至于下面的两行不同系统似乎还不一样,但是不影响使用。

root@doubi:~# modprobe wireguard && lsmod | grep wireguard
wireguard       212992 0
ip6_udp_tunnel     16384 1 wireguard
udp_tunnel       16384 1 wireguard

配置步骤

生成密匙对
当你确定安装成功后,就要开始配置服务端和客户端的配置文件了。放心,这很简单。
# 首先进入配置文件目录,如果该目录不存在请先手动创建:mkdir /etc/wireguard
cd /etc/wireguard

# 然后开始生成 密匙对(公匙+私匙)。
wg genkey | tee sprivatekey | wg pubkey > spublickey
wg genkey | tee cprivatekey | wg pubkey > cpublickey


查看主网卡名称
先查看一下你的主网卡名是什么:
ip addr
# 执行命令后,示例如下(仅供参考),lo 是本地环回 忽略,eth0 就是主网卡名了。
# 写着你的服务器外网IP的(下面 X.X.X.X 处),就是你的主网卡,NAT的服务器则是显示内网IP。
# 如果你拿不准哪个网卡是主网卡,请留言询问。

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
  link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
  inet 127.0.0.1/8 scope host lo
    valid_lft forever preferred_lft forever
  inet6 ::1/128 scope host 
    valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
  link/ether 00:16:3c:cf:89:73 brd ff:ff:ff:ff:ff:ff
  inet X.X.X.X/25 brd 255.255.255.255 scope global eth0
    valid_lft forever preferred_lft forever


生成服务端配置文件
接下来就开始生成服务端配置文件:
# 井号开头的是注释说明,用该命令执行后会自动过滤注释文字。
# 下面加粗的这一大段都是一个代码!请把下面几行全部复制,然后粘贴到 SSH软件中执行,不要一行一行执行!

echo "[Interface]
# 服务器的私匙,对应客户端配置中的公匙(自动读取上面刚刚生成的密匙内容)
PrivateKey = $(cat sprivatekey)
# 本机的内网IP地址,一般默认即可,除非和你服务器或客户端设备本地网段冲突
Address = 10.0.0.1/24 
# 运行 WireGuard 时要执行的 iptables 防火墙规则,用于打开NAT转发之类的。
# 如果你的服务器主网卡名称不是 eth0 ,那么请修改下面防火墙规则中最后的 eth0 为你的主网卡名称。
PostUp  = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -A FORWARD -o wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
# 停止 WireGuard 时要执行的 iptables 防火墙规则,用于关闭NAT转发之类的。
# 如果你的服务器主网卡名称不是 eth0 ,那么请修改下面防火墙规则中最后的 eth0 为你的主网卡名称。
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -D FORWARD -o wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
# 服务端监听端口,可以自行修改
ListenPort = 443
# 服务端请求域名解析 DNS
DNS = 8.8.8.8
# 保持默认
MTU = 1420
# [Peer] 代表客户端配置,每增加一段 [Peer] 就是增加一个客户端账号,具体我稍后会写多用户教程。
[Peer]
# 该客户端账号的公匙,对应客户端配置中的私匙(自动读取上面刚刚生成的密匙内容)
PublicKey = $(cat cpublickey)
# 该客户端账号的内网IP地址
AllowedIPs = 10.0.0.2/32"|sed '/^#/d;/^\s*$/d' > wg0.conf

# 上面加粗的这一大段都是一个代码!请把下面几行全部复制,然后粘贴到 SSH软件中执行,不要一行一行执行!

生成客户端配置文件
接下来就开始生成客户端配置文件:
# 井号开头的是注释说明,用该命令执行后会自动过滤注释文字。
# 下面加粗的这一大段都是一个代码!请把下面几行全部复制,然后粘贴到 SSH软件中执行,不要一行一行执行!

echo "[Interface]
# 客户端的私匙,对应服务器配置中的客户端公匙(自动读取上面刚刚生成的密匙内容)
PrivateKey = $(cat cprivatekey)
# 客户端的内网IP地址
Address = 10.0.0.2/24
# 解析域名用的DNS
DNS = 8.8.8.8
# 保持默认
MTU = 1420
[Peer]
# 服务器的公匙,对应服务器的私匙(自动读取上面刚刚生成的密匙内容)
PublicKey = $(cat spublickey)
# 服务器地址和端口,下面的 X.X.X.X 记得更换为你的服务器公网IP,端口请填写服务端配置时的监听端口
Endpoint = X.X.X.X:443
# 因为是客户端,所以这个设置为全部IP段即可
AllowedIPs = 0.0.0.0/0, ::0/0
# 保持连接,如果客户端或服务端是 NAT 网络(比如国内大多数家庭宽带没有公网IP,都是NAT),那么就需要添加这个参数定时链接服务端(单位:秒),如果你的服务器和你本地都不是 NAT 网络,那么建议不使用该参数(设置为0,或客户端配置文件中删除这行)
PersistentKeepalive = 25"|sed '/^#/d;/^\s*$/d' > client.conf

# 上面加粗的这一大段都是一个代码!请把下面几行全部复制,然后粘贴到 SSH软件中执行,不要一行一行执行!
接下来你就可以将这个客户端配置文件 [/etc/wireguard/client.conf] 通过SFTP、HTTP等方式下载到本地了。
不过我更推荐,SSH中打开显示配置文件内容并复制出来后,本地设备新建一个文本文件 [xxx.conf] (名称随意,后缀名需要是 .conf) 并写入其中,提供给 WireGuard 客户端读取使用。
cat /etc/wireguard/client.conf

其他剩余其他操作:
# 赋予配置文件夹权限chmod 777 -R /etc/wireguard # 打开防火墙转发功能echo 1 > /proc/sys/net/ipv4/ip_forwardecho "net.ipv4.ip_forward = 1" >> /etc/sysctl.confsysctl -p

启动WireGuard
wg-quick up wg0
# 执行命令后,输出示例如下(仅供参考)

[#] ip link add wg0 type wireguard
[#] wg setconf wg0 /dev/fd/63
[#] ip address add 10.0.0.1/24 dev wg0
[#] ip link set mtu 1420 dev wg0
[#] ip link set wg0 up
[#] resolvconf -a tun.wg0 -m 0 -x
[#] iptables -A FORWARD -i wg0 -j ACCEPT; iptables -A FORWARD -o wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

# 如果此处没有报错:RTNETLINK answers: Operation not supported,且输入内容差不多,那么说明启动成功了!


停止WireGuard
wg-quick down wg0


查询WireGuard状态
wg


开机启动
*注意:*Ubuntu 14.04 系统默认是没有 systemctl 的,所以无法配置开机启动。
# 设置开机启动
systemctl enable wg-quick@wg0
# 取消开机启动
systemctl disable wg-quick@wg0

总结
以上就是 Hostwinds 一键搭建 WireGuard 的教程,通过该教程可以轻松实现 Hostwinds 搭建 WireGuard,希望可以帮助需要使用 Hostwinds VPS 搭建 WireGuard 的朋友。