Arch Linux 安装部署 GoVPN 客户端,建立突破网络封锁和审查的 VPN 隧道

View this thread on: d.buzz | hive.blog | peakd.com | ecency.com
·@curl·
0.000 HBD
Arch Linux 安装部署 GoVPN 客户端,建立突破网络封锁和审查的 VPN 隧道
## 关于 GoVPN

GoVPN 是由俄罗斯 “快乐黑客” Sergey Matveev 使用 Go 语言开发的开源免费的 VPN 软件。

GoVPN 简单、安全,可以防止 DPI 深度包检测,可以对抗网络封锁和审查,GoVPN 使用 UDP 协议加密传输流量。

GoVPN 项目官方网站 http://www.govpn.info/

GoVPN 源代码由开发者自我托管,代码仓库 http://git.cypherpunks.ru/cgit.cgi/govpn.git/

GoVPN 最新版本 govpn-7.4 (August 27, 2017),AUR 仓库 <a href="https://aur.archlinux.org/packages/govpn">govpn 7.4-1</a>,由 <a href="https://twitter.com/wzyboy">wzyboy</a> 维护。

(题外话,Sergey Matveev 因不认同 GitHub 的某些政策和做法,从 GitHub 仓库删除了 GoVPN 源代码。)

## 服务器端和本地客户端环境

服务器系统如果是 Ubuntu,参见 <a href="https://steemit.com/govpn/@curl/ubuntu-govpn-vpn">Ubuntu 安装部署 GoVPN</a>

Arch Linux 系统可以按照下面内容设置。Arch Linux 已安装 AUR 软件仓库,已安装 Go

服务器用户名为 bob,本地客户端用户名为 alice

服务器(VPS)可以自由访问国际互联网,有公网 IP,假设为 12.34.56.78,防火墙开放端口 1194(或自定义其他端口)

本地网关为 192.168.1.1,有无公网 IP 无所谓。

建立的 VPN 隧道 IP 段为 172.16.0.1/24,可以自定义为其他内网网段。

---
## 设置服务器端和本地客户端的系统环境
### 服务器端设置略过,参见 <a href="https://steemit.com/govpn/@curl/ubuntu-govpn-vpn">Ubuntu 安装部署 GoVPN</a>
### 本地客户端操作系统为 Arch Linux,首先更新系统并安装 GoVPN

```
[alice@client ~]$ sudo pacman -Syyuu
[alice@client ~]$ yaourt -Syu --aur
[alice@client ~]$ yaourt -S govpn
```

## 在本地客户端

### 创建客户端 Alice 连接服务器密码短语 key.txt

```
[alice@client ~]$ vi key.txt
```

#### 假定密码短语为 govpntest(也可以是长度为 32 个字符的 Base64 编码)

```
govpntest
```

### 在客户端,生成客户名为 Alice 的验证文件:

```
[alice@client ~]$ govpn-verifier Alice
Passphrase:
```

#### Passphrase: 提示输入密码短语,和上面创建的 key.txt 内容一致,即 govpntest,打印输出内容如下

```
$balloon$s=32768,t=16,p=2$pqrN42u1ruKOWDQUFlEMgg$b0QwK15I7VanKqDAyATrE5VHyL5a+r6h4M8cevPNrxo
$balloon$s=32768,t=16,p=2$pqrN42u1ruKOWDQUFlEMgg
```

#### Alice 的验证文件值为:

```
$balloon$s=32768,t=16,p=2$pqrN42u1ruKOWDQUFlEMgg$b0QwK15I7VanKqDAyATrE5VHyL5a+r6h4M8cevPNrxo
```

---
## 在服务器端
服务器端设置参见:<a href="https://steemit.com/govpn/@curl/ubuntu-govpn-vpn">Ubuntu 安装部署 GoVPN</a>

---
## 在本地客户端
### 在客户端,为虚拟网卡 tap10 设置 IP 和路由

```
[alice@client ~]$ sudo ip tuntap add dev tap10 mode tap
[alice@client ~]$ sudo ip addr add 172.16.0.2/24 dev tap10
[alice@client ~]$ sudo ip link set up dev tap10
[alice@client ~]$ sudo ip route add 0/1 via 172.16.0.1
[alice@client ~]$ sudo ip route add 128/1 via 172.16.0.1
[alice@client ~]$ sudo ip route add 12.34.56.78 via 192.168.1.1
[alice@client ~]$ sudo ip route del default
[alice@client ~]$ sudo ip route add default dev tap10
```

### 在客户端启动 govpn-client
-key 值为启动客户端的密码短语
-verifier 值为验证密钥
-iface 值为虚拟网卡名称
-remote 值为远程服务器的公网 IP

```
[alice@client ~]$ govpn-client \
    -key /home/alice/work/key.txt
    -verifier '$balloon$s=32768,t=16,p=2$pqrN42u1ruKOWDQUFlEMgg' \
    -iface tap10 \
    -remote 12.34.56.78:1194
```

#### 或者不带换行符的启动命令

```
[alice@client ~]$ govpn-client -key key.txt -verifier '$balloon$s=32768,t=16,p=2$pqrN42u1ruKOWDQUFlEMgg' -iface tap10 -remote 12.34.56.78:1194
```

至此,服务器端和本地客户端的 VPN 隧道已建立完成

---
## 在本地客户端,测试 VPN 隧道的连接状态

#### Ping 服务器端地址 172.16.0.1

```
[alice@client ~]$ ping 172.16.0.1
```
#### ping 输出如下

````
PING 172.16.0.1 (172.16.0.1) 56(84) bytes of data.
64 bytes from 172.16.0.1: icmp_seq=1 ttl=44 time=83.5 ms
64 bytes from 172.16.0.1: icmp_seq=2 ttl=44 time=83.0 ms
64 bytes from 172.16.0.1: icmp_seq=3 ttl=44 time=83.0 ms
64 bytes from 172.16.0.1: icmp_seq=4 ttl=44 time=83.1 ms
64 bytes from 172.16.0.1: icmp_seq=5 ttl=44 time=83.2 ms
64 bytes from 172.16.0.1: icmp_seq=6 ttl=44 time=83.3 ms
64 bytes from 172.16.0.1: icmp_seq=7 ttl=44 time=83.1 ms
64 bytes from 172.16.0.1: icmp_seq=8 ttl=44 time=83.1 ms
^C
--- 172.16.0.1 ping statistics ---
8 packets transmitted, 8 received, 0% packet loss, time 7007ms
rtt min/avg/max/mdev = 83.038/83.212/83.592/0.261 ms
````

#### 说明 VPN 隧道已通

### 用 curl 命令测试隧道的流量转发状态

```
[alice@client ~]$ curl ifconfig.me
```

### 显示 IP 为服务器的公网 IP

```
12.34.56.78
```

curl 获取到了服务器的公网 IP,流量转发成功

---
## Disable GoVPN,禁用 GoVPN 守护进程

本地客户端删除虚拟网卡,恢复默认 IP 和路由执行以下命令或者重启系统

```
sudo ip link del dev tap10
sudo ip route del 12.34.56.78 via 192.168.1.1
sudo ip route del default
sudo ip route add default via 192.168.1.1
```

---
## 其他

GoVPN 设计原理和使用方法参考 http://www.cypherpunks.ru/govpn/index.html

如果拥有 IPv4 和 IPv6,设置方法参考开发者给出的示例 http://www.cypherpunks.ru/govpn/Example.html#Example

GoVPN 目前不支持 Windows,Android 以及 iOS 系统。

GoVPN 在数字权利遭受强权政府日益侵害的国家,能有效捍卫网络用户的数字权利。

GoVPN 在中国、俄罗斯、伊朗等网络审查严重的国家,能有效突破网络封锁,突破 GFW 封锁,加密访问被封锁的网站,自由使用互联网。

---
原创内容,转载请注明出处。
内容修订请浏览 https://github.com/aturl/awesome-anti-gfw
👍 , , , , , , , , , , , , , , , , , , , ,