如何搭建一个个人VPN呢?
想要科学(?)的使用网络,往往有两种方式,代理(proxy)or 私有局域网(VPN)
什么?你的梯子又双挂了,为什么不搭建一个自己的VPN呢?
本篇文章仅供计网知识学习交流使用
租借一个海外的服务器
首先,你需要有一台海外/香港等地区的服务器,确保服务器可以正常访问海外网站即可。
云服务厂商推荐:
- 国内:阿里云/腾讯云(推荐腾讯云锐驰型,公网流量不会额外收费)
- 国外:vultr
购买国外服务器需要国际支付方式,推荐:海外银行卡/PayPal。
(国内银行卡好像也可以试试,但我试的不太行,换了两张卡都被海外厂商封掉了跨境交易…)
服务器配置买最低的即可,服务器只用来做流量转发,配置太高只会浪费。
搭建VPN
本教程采用WireGuard工具来搭建,大家也可以选择其他的。
服务器操作系统为ubuntu,客户端操作系统为macOS。(windows可以使用wireguard官方的图形化工具)
安装WireGuard
登录到服务器,安装wireguard
。
1 | sudo apt update |
生成服务器密钥对
- 更改文件权限,确保新建的文件只有自己的用户可以访问。
1 | umask 077 |
- 创建目录
wireguardkey
。
1 | mkdir wireguardkey |
- 生成服务端密钥对,将公钥和私钥保存到这两个文件中,这两个key文件会生成于你所在的目录下。
server_private.key
:私钥,写入配置文件。server_public.key
:公钥,给客户端用。
1 | wg genkey | tee server_private.key | wg pubkey > server_public.key |
- 开启内核转发。
1 | sudo vim /etc/sysctl.conf |
输入/
进行查找 or 添加以下内容:
1 | net.ipv4.ip_forward=1 |
之后保存退出,用以下命令使修改生效:
1 | sudo sysctl -p |
生成客户端密钥对
- 创建目录
wireguardkey
,切换到该目录下。 - 安装
WireGuard
命令行工具。
1 | brew install wireguard-tools |
- 和服务端类似,生成客户端密钥对。
client_private.key
:私钥,写入客户端配置。client_public.key
:公钥,要写到服务器配置里。
1 | umask 077 |
将密钥写入配置文件
- 编辑服务器配置文件:
/etc/wireguard/wg0.conf
1 | [Interface] |
- 把
<ServerPrivateKey>
换成你的server_private.key
内容 - 把
<ClientPublicKey>
换成你的client_public.key
内容 - 把
eth0
换成你的服务器外网网卡名(可用ip route
查看,显示dev eth0
就表示eth0
是外网网卡)
- 编辑客户端配置文件:
/opt/homebrew/etc/wireguard/wg0.conf
1 | [Interface] |
把
<ClientPrivateKey>
换成client_private.key
内容<ServerPublicKey>
换成服务器生成的server_public.key
内容<ServerIP>
换成服务器的公网ip⚠️注意:如果你的服务器不支持ipv6,需要把
[Peer]
中的AllowedIPs = 0.0.0.0/0, ::/0
更改为AllowedIPs = 0.0.0.0/0
启动服务
在启动服务前,请检查你的服务器防火墙或者是云服务商的安全组,确保
51820
端口的UDP
流量是开放的。
- 在服务器执行:
1 | sudo systemctl start wg-quick@wg0 |
启动服务,指定wg0配置文件,并设置为开机自启,可用sudo systemctl status wg-quick@wg0
查看服务状态。
- 在客户端执行:
- 开启VPN服务:
1 | sudo wg-quick up wg0 |
- 关闭VPN服务:
1 | sudo wg-quick down wg0 |
验证服务
按照上面的流程,你的VPN服务应该已经可以正常运行了。
可以使用以下方法验证一下:
ping
一下google检查自己的ip地址是不是服务器的ip:
curl ifconfig.me
说些什么吧!