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 来管理,具体命令是:
客户端 -> 另一个客户端的内网¶
连接 OpenVPN 的两个 client 之间可以互相通信,这是因为服务端推送的路由里包含了对应的网段。但是想从 Client A 到达 Client B 所在局域网的其他机器,还需要额外的配置。因为 OpenVPN 服务端缺少 Client B 局域网相关的路由规则。
# server.conf
push "route 172.29.0.0 255.255.0.0" # client -> Client B 给客户端推送 172.29.0.0/16 网段的路由(即这个网段的IP的信息都经过VPN)
route 172.29.0.0 255.255.0.0 #在 OpenVPN Server 上添加 172.29.0.0/16 网段的路由,具体下一跳是哪里,由 client-config 里的 iroute 指定
# 启用 client-config, 目录里的文件名对应 client.crt 的 Common Name
client-config-dir /etc/openvpn/ccd
# /etc/openvpn/ccd/client-b
iroute 172.29.0.0 255.255.0.0 # 告诉 OpenVPN Server, 172.29.0.0/16 的下一跳应该是 client-b (根据名字来)
内网与内网互访¶
在前两节所给的配置基础上,只需要再加一点配置,就能实现 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 |
detail info in table
- up to 6MB/s off-peak period
- 年付8折 + 优惠码8折 \(15*12*0.8*0.8=115.2\)
- 年付
150¥*0.88
- 年付+优惠码 128*0.7 = 89.6¥
- 年费+优惠码 128G每月,:46.99¥/128G or 76.36¥/256G。单价最低时间最短买法:256G,按季度买
- 新注册用户运行一周内测试5GB: up to 6MB/s in real download
My Choice: 单价,大小,速度,优惠码有效期
现在组合:奈云机场(2) + fastlink。 等fastlink过期了(1),看要不要转成 冲浪猫。
- 240624
- 241105 配置:复制订阅,订阅地址后面加
&flag=clash
下载config.yaml
slow and expensive I had try
Nyacloud 喵云:只有10个节点 8¥/40GB/0.03Gbps
or 17¥/128GB/0.2Gbps
平均 5GB/¥
BGP: Border Gateway Protocol
边界网关协议(Border Gateway Protocol,BGP)就是互联网的邮政服务。当有人把一封信投进邮筒时,邮政服务就会处理这封邮件,并选择一条快速、高效的路线将这封信投递给收件人。同样地,当有人通过互联网提交数据时,BGP 负责寻找数据能传播的所有可用路径,并选择最佳的路由,这通常意味着在自治系统之间跳跃。1
IPLC: International Private Leased Circuit
中文翻译是国际私用出租线路,是指用户专用的跨国的数据、话音等综合信息业务的通信线路。通俗地说,也就是指传统的跨境专线。
延迟更低40ms、速度更快, 但是价格贵1 元 / GB。
Anycast
Anycast 是一种网络寻址和路由方法,可以将传入请求路由到各种不同的位置或“节点”。在 CDN 的上下文中,Anycast 通常会将传入的流量路由到距离最近并且能够有效处理请求的数据中心。选择性路由使 Anycast 网络能够应对高流量、网络拥塞和 DDoS 攻击。
SJF 稳定翻墙VPS¶
brook vpn+ Amazon American node