# 冲浪第一步 - 隐藏IP
隐藏 IP 地址基本上有两种方法可选。一种是使用代理服务器，另一种是使用虚拟专用网。
## 代理服务器
代理服务器（Proxy Server）是一种位于客户端和目标服务器之间的中间服务器，其主要功能是转发客户端请求并代表客户端与目标服务器通信。一般来说代理服务器分为两种，HTTP/HTTPS代理（下面简称HTTP代理）和SOCKET代理(本文以socks5举例，下面称SOCKS 代理)。HTTP代理工作在应用层，只为HTTP和HTTPS提供代理；SOCKS 代理工作在传输层，可以转发TCP和UDP代理。

下面是两种代理的区别

| 特性   | HTTP 代理                      | SOCKS 代理                    |
| ---- | ---------------------------- | --------------------------- |
| 工作层次 | 应用层 (HTTP/HTTPS)             | 传输层/会话层 (TCP/UDP)           |
| 协议支持 | HTTP, HTTPS                  | 所有 TCP 和 UDP 协议             |
| 透明度  | 可以修改 HTTP 响应                 | 通常不修改应用层数据                  |
| 安全性  | 取决于配置，HTTPS 更好               | SOCKS5 支持认证和加密              |
| 缓存   | 可缓存                          | 不可缓存                        |
| 应用   | Web 浏览器, 访问 HTTP/HTTPS 网站的应用 | 任何需要连接 Internet 的应用，尤其是其他协议 |
⚠️ICMP协议不能使用代理服务器，ICMP 消息直接由 IP 协议承载，**没有 TCP 或 UDP 头部**。 换句话说，ICMP 本身不是建立在 TCP 或 UDP 之上的，所以不能使用以上两种代理服务器。
### 代理服务器的设置
#### Windows
对于Windows来说，在设置中搜索"代理"，即可设置代理服务器。
#### Linux
对于gnome和kde桌面，都可以和Windows一样在设置中设置代理，如果要单独对终端设置代理，可以参考以下命令
```bash
export http_proxy=http://PROXYHOST:PROXYPORT
export https_proxy=http://PROXYHOST:PROXYPORT
export socks_proxy=socks5://PROXYHOST:PROXYPORT
export all_proxy=socks5://PROXYHOST:PROXYPORT
export http_proxy=http://USERNAME:PASSWORD@PROXYHOST:PROXYPORT
# 使用 socks proxy (使用本地 DNS)
export http_proxy=socks5://PROXYHOST:PROXYPORT
# 使用 socks proxy (使用远程 DNS)
export http_proxy=socks5h://PROXYHOST:PROXYPORT
```
http_proxy等变量大小写不敏感，偷懒可以只设置all_proxy
#### MacOS
macOS可以在对应的网络连接中设置代理，终端代理的设置参考Linux
#### 一些常用软件的设置
某些软件会提供代理服务器的设置，不需要在系统中设置也可以对流量进行代理，例如Firefox。
![[Pasted image 20250514170546.png]]
## 虚拟专用网
虚拟专用网 (VPN) 是另一种隐藏 IP 地址并保护在线活动的方法。与代理服务器不同，VPN 在您的设备和 VPN 服务器之间创建了一个安全的、加密的隧道，所有通过该隧道传输的数据都会被加密。
### VPN 的工作原理
一般来说VPN软件会虚拟化出一张网卡，将指定的流量转发到这张网卡上，这张网卡上的流量由VPN软件加密并传输到VPN服务器上，并从VPN服务器流出到公网。
⚠️VPN的方式下，ICMP报文可以被代理。
### VPN 协议
VPN 使用不同的协议来建立和维护安全连接。常见的 VPN 协议包括：
- **OpenVPN：** 一种开源协议，被广泛认为是最安全和可靠的 VPN 协议之一。
- **IPsec/IKEv2：** 一种快速且安全的协议，通常用于移动设备。
- **WireGuard：** 一种新兴的 VPN 协议，建立在UDP上，以其高性能和简单性而闻名。
- **L2TP/IPsec：** 一种较旧的协议，安全性不如 OpenVPN 或 IKEv2。
- **PPTP：** 一种非常过时的协议，安全性极低，应避免使用。
# 冲浪第二步 - 谨防DNS泄露
DNS 泄漏可能发生在隐藏IP之后，由于DNS请求没有被转发到代理/VPN服务器（下面简称远程服务器），导致流量在远程服务器仍然发送到本地DNS解析的IP上。例如现在某个全球服务Ａ，远程服务器B处于国家C，你所在地域在国家D，本地解析A的IP处于国家D，当你通过远程服务器访问A时，你的流量从B发出，最终到达国家D，这会让服务A感知到服务器B的IP存在异常流量，因为在设计上服务器B的流量应该发送到国家C所处的IP。
## 防止DNS
### 使用代理服务器
在使用代理服务器的情况下，只有SOCKS代理可以代理dns请求，只要设置为`socks5h://PROXYHOST:PROXYPORT`即可。
### 使用VPN
在使用VPN的情况下，需要指定系统的DNS服务器，并设置其路由转发到对应的网络中。
# 冲浪第三步 - 屏蔽WebRTC
WebRTC (Web Real-Time Communication) 是一种**开源项目和技术标准**，它允许浏览器和移动应用程序通过简单的 API 实现**实时音视频通信和数据传输**，无需安装任何插件或第三方软件。WebRTC对隐私浏览的影响主要体现在P2P连接上， WebRTC 尽可能地建立设备之间的直接 P2P 连接，减少通信延迟，提高效率，**同时会让远程服务器获取到你的真正IP**。
## 屏蔽WEbRTC
以Firefox为例，使用[Disable WebRTC](https://addons.mozilla.org/en-US/firefox/addon/happy-bonobo-disable-webrtc/?utm_source=addons.mozilla.org&utm_medium=referral&utm_content=search)插件禁止浏览器的WebRTC连接。
# 冲浪第四步 - 修改浏览器UserAgent
对于HTTP类型的服务，服务器可以在网关处轻易的获取到流量中的UserAgent，一般其中会包含当前浏览器的语言和操作系统的语言等信息，这些信息很容易让前面三步的工作前功尽弃。例如某网站拒绝对某个区域C提供服务，区域C使用语言C，当浏览器访问此网站时，网站可以根据UserAgent中的浏览器语言和操作系统语言拒绝并标记这个IP的访问流量。
## 修改UserAgent
以Firefox为例，可以使用[# User-Agent Switcher and Manager](https://addons.mozilla.org/en-US/firefox/addon/user-agent-string-switcher/?utm_source=addons.mozilla.org&utm_medium=referral&utm_content=search)插件修改UserAgent。