VPN
VPN原理
vpn:英文全称是“Virtual Private Network”,翻译过来就是“虚拟专用网络”。vpn通常拿来做2个事情:
- 一个是可以让世界上任意2台机器进入一个虚拟的局域网中(当然这个局域网的数据通讯是加密的,很安全,用起来和一个家庭局域网没有区别),
- 一个是可以用来翻墙。
VPN与SS的区别
- SS全称shadowsocks,SSR全称shadowsocks-R
- VPN是为了保证通信的安全性、私密性,不是专门为“科学上网”制定的技术
- 而SS/SSR则是为了转发客户端流量,绕过防火墙的检测,从而达到“科学上网”的真实意图,但是没有保证数据传输的安全性。
- vpn比ss更加底层,它通过操作系统的接口直接虚拟出一张网卡,后续整个操作系统的网络通讯都将通过这张虚拟的网卡进行收发。
- 这和任何一个代理的实现思路都差不多,应用层并不知道网卡是虚拟的,这样vpn虚拟网卡将以中间人的身份对数据进行加工,从而实现各种神奇的效果。具体来说,vpn是通过编写一套网卡驱动并注册到操作系统实现的虚拟网卡,这样数据只要经过网卡收发就可以进行拦截处理。
一句话,vpn在IP层工作,而ss在TCP层工作。
内网访问举例
- 普通用户无法访问公司内网服务器
- 开启VPN以后,如果他想打开公司ERP,他的电脑就不再直接连接公司ERP网站,而是去连接VPN服务器,并给VPN服务器发一条指令——“我要访问公司ERP”。
- VPN服务器接到指令后,VPN服务器自己去访问公司ERP,收到公司ERP网页的内容,再把内容回传给员工,这样使用VPN的员工最终就能看到公司ERP网站的内容了。
- 也就是说,使用VPN时,这个员工的所有网上访问都通过VPN服务器代理完成的。
IP packet 如何被传输
理解 VPN 路由(以及任何网络路由)配置的关键是认识到一个 IP packet 如何被传输,以下描述的是极度简化后的单向传输过程:
- 机器 A (192.168.0.2) 发送了一个目标地址为 172.29.1.4 的 IP packet.
- 根据本地路由规则,172.29.1.0/24 的下一跳是虚拟网卡 tun0, 由 VPN 客户端接管。
- VPN 客户端将这个 packet 的来源地址从 192.168.0.2 改为 10.8.0.123, 转发给 VPN 服务端。
- VPN 服务端收到 packet. 根据本地路由规则,172.29.1.0/24 的下一跳是默认网关 172.29.1.1.
- 默认网关找到在同一个局域网内的机器 B (172.29.1.4).
客户端 -> 内网
为什么机器 A 的本地路由表里会有 172.29.1.0/24 这个网段的路由规则?通常情况下,这是 OpenVPN 服务端推送给客户端,由客户端在建立 VPN 连接时自动添加的。也可以由服务端自定义,比如wireguard
内网 -> 客户端
这个时候,如果机器 B 想要回复 A(比如发个 ACK),就会出问题,因为 packet 的来源地址还是 10.8.0.123, 而 10.8.0.0/24 网段并不属于当前局域网,是 VPN 服务端私有的——机器 B 往 10.8.0.123 发送的 ACK 会在某个位置(比如默认网关)遇到 “host unreachable” 而被丢弃。对于机器 A 来说,表面现象可能是连接超时或 ping 不通。
解决方法是,在 packet 离开 VPN 服务端时,将其「伪装」成来自 172.29.0.3(举例VPN 服务端的局域网地址),这样机器 B 发送的 ACK 就能顺利回到 VPN 服务端,然后发给机器 A. 这就是所谓的 SNAT。
- SNAT: Source Network Address Translation,是修改网络包源ip地址的。
- DNAT: Destination Network Address Translation,是修改网络包目的ip地址的。
在 Linux 系统中由 iptables 来管理,具体命令是:
1 | iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE. |
客户端 -> 另一个客户端的内网
连接 OpenVPN 的两个 client 之间可以互相通信,这是因为服务端推送的路由里包含了对应的网段。但是想从 Client A 到达 Client B 所在局域网的其他机器,还需要额外的配置。因为 OpenVPN 服务端缺少 Client B 局域网相关的路由规则。
1 | server.conf |
内网与内网互访
在前两节所给的配置基础上,只需要再加一点配置,就能实现 OpenVPN 服务端所在局域网与客户端所在局域网的互访。配置内容是,在各自局域网的默认网关上添加路由,将对方局域网网段的下一跳设为 OpenVPN 服务端 / 客户端所在机器,同时用 iptables 配置相应的 SNAT 规则。
机场购买链接推荐
Based on the info in clashio, we select some cheap vpns to try.
name | 每月价格(¥/GB/off on holiday) | 每月单价(GB/¥) | 每年单价(GB/¥) | 节点数与稳定性 | 使用速度感觉 |
---|---|---|---|---|---|
fastlink 2019 | 20/100/-30% | 5 | 100+, 节点速度高达5Gbps | 峰值 5Gbps (1) | |
totoro 2023 | 15/100/-20%(2) | 6.6 | ??? | ??? | |
冲浪猫 2022 | 16/200/-12%(3) | 12.5 | ??? | 峰值 1Gbps | |
奈云机场 2021 | 10.6/168/-30%(4) | 15.8 | 230624购买,240109几天全面掉线 | 峰值 5Gbps (6) | |
FatCat 2023 | 6/60/-20% | 10 | ??? | 峰值 xx Gbps |
!!! question annotate “My Choice: 单价,大小,速度,优惠码有效期”
1. 优惠码(春节 中秋 双十一)
1. [fastlink](https://v02.fl-aff.com/auth/register?code=rotu) 用了两年了,还是x3很快的。但是相当于一个月只有30GB, 不够用。
3. [奈云机场](https://www.naiun2.top/#/register?code=gL7mHyh9)(可靠性暂时不行),[冲浪猫](https://b.msclm.net/#/register?code=AAUF1Efg) 平衡比较好。
现在组合:奈云机场(2) + fastlink。 等fastlink过期了(1),看要不要转成 冲浪猫。
- 240624
- 241105 配置:复制订阅,订阅地址后面加
&flag=clash
下载config.yaml
SJF 稳定翻墙VPS
brook vpn+ Amazon American node
各种设备翻墙
参考文献
[^1]: BGP 漫谈