大学网络内有一台 Linux 机器 ( A
),它位于防火墙后面,但具有真实 IP。我无法访问或了解此网络中的 IP 分布,因此我无法直接remoteip X.Y.Z.200-250
在 pptpd 配置中进行设置,因为这可能会导致冲突。我想知道是否可以为所有连接的 VPN 客户端创建一个虚拟集线器,然后将其 NAT 到真实网络。
下面是一些笨拙的 ASCII 图形,说明了我想要实现的目标:
PPTP-client ---\ ________________ ________________________
\ | 10.0.0.0/24 | |10.0.0.0/24 real ip|
PPTP-client ----->| Virt. hub (A) |----|ethX A eth0|----- Outside world
/ |_______________| |_______________________|
PPTP-client ---/
谷歌搜索显示 PacketiX.NET 和 UT-VPN 具有此类内置功能,但我不知道如何使用普通的 pptpd 来实现。我尝试创建虚拟接口,使用静态 IP 配置它,然后将此接口子网中的 IP 提供给 pptp-client,但没有成功。
使用其他 vpn 服务器是有问题的,因为相当严格的防火墙设置和我必须使用湿件 ssh 服务器进行任何操作A
。
答案1
您可以使用 PPTPd 服务器(如果您的网络没有过滤 GRE 协议)。PPTD 将为您服务器上的每个客户端创建新的 ppp 接口。
例如您指定
localip 192.168.101.1-100
remoteip 192.168.101.101-200
因此,每个 ppp* 接口都将从 192.168.101 子网获取新 IP。最后,您可以将来自此子网的所有流量 NAT 到您的真实 IP(不要忘记 net.ipv4.ip_forward=1)
# here could be full MASQUERADE or SNAT
iptables -t nat -I POSTROUTING -o real_interface0 -j MASQUERADE
# forward for all ppp + MSS tune, conntrack recommended
iptables -I FORWARD -p tcp --tcp-flags SYN,RST SYN -s 172.20.1.0/24 -j TCPMSS --clamp-mss-to-pmtu