我有 2 个 Debian 盒子,想将其中一个用作 VPN 服务器,另一个用作客户端。目标是让客户端通过服务器的互联网连接访问互联网。换句话说:
client(encrypted packets) ---> ISP1 ----> ISP2 ----> server(decrypts packets) ---->ISP2
响应则相反。
我已经设置了 TUN 设备,可以 ping 通。所以这似乎是路由问题。
client# route -n
0.0.0.0 192.168.1.1 0.0.0.0 UG 0 0 0 wlp1s0
0.0.0.0 0.0.0.0 0.0.0.0 U 1002 0 0 enp2s0
10.0.0.0 10.4.0.1 255.255.255.0 UG 0 0 0 tun1
10.4.0.1 0.0.0.0 255.255.255.255 UH 0 0 0 tun1
169.254.0.0 0.0.0.0 255.255.0.0 U 0 0 0 enp2s0
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 wlp1s0
显然,目前互联网请求是通过 路由的192.168.1.1
。但是,如果我将 Mozilla Firefox 的代理设置设为10.0.0.0
,则无法访问任何内容。traceroute 10.0.0.0
只显示 1 跳。
server# route -n
0.0.0.0 192.168.0.1 0.0.0.0 UG 202 0 0 eth0
10.0.0.0 10.4.0.2 255.255.255.0 UG 0 0 0 tun1
10.4.0.2 0.0.0.0 255.255.255.255 UH 0 0 0 tun1
192.168.0.0 0.0.0.0 255.255.255.0 U 202 0 0 eth0
缺什么?
答案1
这将需要新的路由和防火墙来帮助您让客户端通过服务器访问互联网。
假设 VPN 连接用于将客户端连接到服务器,并且客户端和服务器之间的 VPN 子网是对等的,子网 ID 为:10.40.0.0。
您需要使用以下静态路由更改客户端的默认网关,使其将所有非本地流量转发到服务器:
ip route change default via 10.4.0.2
同时,你需要在服务器的防火墙策略上制定一个 NAT 规则,这样所有面向 Internet 的流量都将被视为源自服务器本身。假设面向 Internet 的网络接口是eth0
,NAT 规则如下:
iptables -t nat -A POSTROUTING -s 10.4.0.0/24 -o eth0 -j MASQUERADE
希望这能有所帮助。