如何将特定客户端的流量路由到 VPN (PPTP)?

如何将特定客户端的流量路由到 VPN (PPTP)?

设置:

  • 我有一个服务器设置为 DHCP (isc-dhcp-server) 和 DNS (bind9) 服务器(充当路由器)。
  • 它使用 eth0 设备通过 pppoe (ppp0) 连接到互联网。
  • eth1 连接到充当接入点的路由器。
  • 通过接入点,客户端可以通过以太网或 WiFi 进行连接。
  • 使用此处定义的 iptables 将来自 eth1 的流量转发到 ppp0(进行一些修改以匹配互联网设备):https://killtacknine.com/building-an-ubuntu-16-04-router-part-3-firewalls/
  • IPV6也以同样的方式设置。
  • ufw 还通过“任何地方允许 192.168.1.0/24”规则启用。
  • 服务器还通过 ppp0 连接到 VPN (PPTP),当连接时,它会获取 ppp1 作为设备名称。

我想要做的是将通过 eth1 设备通过 ppp1 连接到 VPN 的特定客户端的互联网流量(基于 IP 或 MAC 地址)转发。

我尝试使用以下规则设置 iptables:

iptables -A INPUT -i ppp1 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i eth1 -s 192.168.1.113 -o ppp1 -j ACCEPT
iptables -A FORWARD -i ppp1 -o eth1 -m conntrack  --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -t nat -A POSTROUTING -o ppp1 -j MASQUERADE

但它似乎不起作用,我不知道我错过了什么,我对 iptables 的知识几乎为零。

答案1

1) 确保您的 AP 通过 eth1 连接桥梁将其自己的以太网接口连接到 WLAN 接口,否则 DHCP 将毫无用处,并且如果它执行 NAT(许多家庭路由器的默认设置),您将无法看到客户端的 IP 地址。

2)你不需要iptables做路由(我的一个小烦恼;出于某种原因,互联网上的许多人认为他们需要防火墙规则来进行路由......)。特别是,您不需要进行 NAT(除非您的 VPN 出于某种原因需要它,但问题中没有信息来决定这一点)。

如果你想路线数据包一个特定的客户,你需要策略路由(google一下,有很多教程)。基本上,你做

ip rule add from <source address> lookup <table name>

然后添加一个表来定义路由(在您的情况下)ppp1以及与其关联的网关。

ip route get <dest address>会告诉您操作系统认为数据包应该去哪里。比调试防火墙规则容易得多。

3) 使用wireshark(或者tcpdump,在不同的窗口中,每个感兴趣的网络接口对应一个)调试所有内容。如果没有实际查看哪些数据包使用哪些地址到达何处,就很难判断出了什么问题。

相关内容