我有 3 台电脑:
- pc1 承载 VPN 服务器
- pc2 托管代理服务器并充当客户端 1
- pc3 作为客户端 2
- pc3 与 pc2 共享网络,但不与 pc1 共享网络
- pc2与pc1共享网络。
- client1 通过 pc2 上的代理连接
- client2 也通过 pc2 上的代理进行连接
因此设置如下:
----------------
| pc3 |
| VPN Client2 |
| 10.100.0.3 |
----------------
|
| Network A
|
----------------
| pc2 |
| Proxy server/|
| VPN Client1 |
| 10.100.0.2 |
----------------
|
| Network B
|
----------------
| pc1 |
| VPN Server |
| 10.100.0.1 |
----------------
现在,pc1 托管一个网络服务器,它将获取发出网页请求的客户端的 ip 地址。
当我从 PC2 发出请求时,我可以正确地看到该请求来自 PC2。
但是当我从 PC3 发出请求时,我希望看到 VPN 分配的 IP 地址 10.100.0.3,但是,如果客户端 1 已连接,我则会从 PC2 获取 IP 地址,如果客户端 1 未连接,则会获取 VPN 服务器本身的 IP 地址(10.100.0.1)
我以为我创建了一个直接的“隧道”,这会让 pc1 认为请求直接来自 pc3,我做错了什么?
答案1
我不太清楚你的期望。
如果 PC2 是代理,并且所有客户端都配置为使用该代理,那么您所描述的就是我所期望的:客户端 1 通过 PC2 上的代理发出请求,然后代理将该请求转发给 PC1。
因此从网络角度来看,PC1 看到的请求确实来自 PC2。
如果您想让 PC3 的 IP 对 PC1 可见,那么我认为最好的选择是配置您的代理以将 X-Forwarded-For 标头发送到 PC1。
我认为可能存在两个问题:
但是当我从 PC3 发出请求时,我希望看到 VPN 分配的 IP 地址 10.100.0.3,但是,如果客户端 1 已连接,我则会从 PC2 获取 IP 地址,如果客户端 1 未连接,则会获取 VPN 服务器本身的 IP 地址(10.100.0.1)
PC1 是否有规则来伪装来自 VPN 的流量?如果是,那么我想知道客户端 1 尝试连接的 IP 是什么(如果您的客户端连接到 10.100.0.1 以外的其他地址,并且您正在伪装,我倾向于认为您的情况是正常的)。
我以为我创建了一个直接的“隧道”,这会让 pc1 认为请求直接来自 pc3,我做错了什么?
听起来你确实这么做了,但是如果你的客户端使用代理进行 HTTP/S 请求,那么直接隧道将不会使 PC3 的 VPN IP 可见,因为 PC3 并未直接连接到 PC1。
你能确认一下是否真的有伪装吗?你可以用sudo iptables -t nat -vnL