如何强制VPN用户stream量通过SOCKS5代理?

我有一个Raspberry Pi,它build立到远程服务器(VPS)的SSH代理,并在Pi上打开一个端口,所以我可以使用它作为SOCKS代理。 这是我用来build立隧道的命令:

ssh -D 1080 -f -C -q -N user@hostname 

这显示了它应该如何工作:

  ______________________________ | | | Client | |______________________________| | | L2TP over IPSEC ________________|_______________ __ | | | | VPN (192.168.1.XXX) | | |________________________________| | ________________|_______________ |-RaspberryPi | | | | SOCKS5 (127.0.0.1:1080) | | |________________________________|__| | | SSH tunnel ________________|________________ | | | VPS (Amazon EC2) | |_________________________________| | / \ / \ the internet 

这些是我的IP表:

 *nat :PREROUTING ACCEPT [0:0] :INPUT ACCEPT [0:0] :OUTPUT ACCEPT [0:0] :POSTROUTING ACCEPT [0:0] -A POSTROUTING -s 192.168.42.0/24 -o eth+ -j MASQUERADE -A POSTROUTING -s 192.168.43.0/24 -o eth+ -m policy --dir out --pol none -j MASQUERADE COMMIT *filter :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [0:0] -A INPUT -p udp -m udp --dport 1701 -m policy --dir in --pol none -j DROP -A INPUT -m conntrack --ctstate INVALID -j DROP -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT -A INPUT -p udp -m multiport --dports 500,4500 -j ACCEPT -A INPUT -p udp -m udp --dport 1701 -m policy --dir in --pol ipsec -j ACCEPT -A INPUT -p udp -m udp --dport 1701 -j DROP -A FORWARD -m conntrack --ctstate INVALID -j DROP -A FORWARD -i eth+ -o ppp+ -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT -A FORWARD -i ppp+ -o eth+ -j ACCEPT -A FORWARD -s 192.168.42.0/24 -d 192.168.42.0/24 -i ppp+ -o ppp+ -j ACCEPT -A FORWARD -d 192.168.43.0/24 -i eth+ -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT -A FORWARD -s 192.168.43.0/24 -o eth+ -j ACCEPT -A FORWARD -j DROP COMMIT 

使用脚本“ setup-ipsec-vpn ”来制作VPN。

所以我的问题是:我怎样才能更改这些IP表,删除所有的VPN客户端的出站数据包,除非它在树莓派(1080)上使用SOCKS5代理,

答案部分取决于你是否会configuration你的客户端。

换句话说,你打算让SOCKS代理是明确的还是透明的?

如果你可以configuration你的客户端应用程序使用一个明确的代理,那么它应该很简单(尽pipe你可能希望你的SOCKS监听VPN接口 – 或创build一个DNAT规则)。

 -A INPUT -s 192.168.1.0/24 -d 192.168.1.1 -m tcp -p tcp --dport 1080 -j ACCEPT -A INPUT -s 192.168.1.0/24 -j DROP -A FORWARD -s 192.168.1.0/24 -j DROP 

如果你想有一个透明的代理,我认为可能值得考虑引入haproxy。

这haproxy博客文章提供了如何设置透明绑定的概述,这听起来像它可能适合您的用例。

在这种情况下,您可能会发现使用SSH隧道模式而不是SOCKS更容易(或者在Pi和网关之间添加另一个VPN连接)。

现在引起你的“问题”的具体规则是,我认为,这一个:

 -A FORWARD -i ppp+ -o eth+ -j ACCEPT 

更一般地说,似乎你可能想重写你的防火墙规则来实现你想要的。