通过 Openvpn 隧道路由某些客户端

通过 Openvpn 隧道路由某些客户端

我的 centos 盒子里运行着 openvpn 客户端,我用它作为内部网络的路由器。我有两个接触外部世界的接口。

eth0 - normal internet 
tun0 - openvpn tunnel 

我通过放置“route-noexec”选项来禁用 openvpn 自动路由拉动,并且现在手动处理所有路由。在我打开 openvpn 隧道后,我的路由表是这样的。

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.80.0    0.0.0.0         255.255.255.0   U     0      0        0 eth1
10.8.0.0        0.0.0.0         255.255.255.0   U     0      0        0 tun0
192.168.44.0    0.0.0.0         255.255.255.0   U     0      0        0 eth0
192.168.11.0    0.0.0.0         255.255.255.0   U     0      0        0 dummy0
169.254.0.0     0.0.0.0         255.255.0.0     U     1002   0        0 eth0
169.254.0.0     0.0.0.0         255.255.0.0     U     1003   0        0 eth1
0.0.0.0         192.168.44.1    0.0.0.0         UG    0      0        0 eth0

现在我有内部主机连接到我的 centos 机器上的接口 192.168.80.0

192.168.80.50

我需要通过接口 tun0 路由来自该用户的所有流量,并通过 eth0 路由所有其他流量

我尝试添加像这样的 POSTROUTING 规则

iptables -t nat -A POSTROUTING -s 192.168.80.50 -o tun0 -j MASQUERADE
iptables -t nat -A POSTROUTING  -o eth0 -j MASQUERADE

但所有客户端仅通过 eth0,包括 192.168.80.50。我怎样才能做到这一点?

答案1

基于超级用户上的这个答案

为某些IP创建路由表:

ip rule add from <sourceIP>/<mask> table <name>

然后声明一条新路由来匹配路由表<name>

ip route add default via <router> dev tun0 table <name> 

对于需要使用 VPN 的人来说,拥有一个子网会更容易,因为使用此配置,您需要指定表中的所有 IP<name>

答案2

如果您希望将选定 VPN 客户端的所有流量都通过 VPN 隧道,则必须在此用户配置中“在客户端”进行设置。在客户端配置文件中,它是选项:“redirect-gateway autolocal”。在 VPN 服务器上,您可能必须为此 VPN 客户端 IP 设置 SNAT 或 MASQUERADE。

答案3

看一下“iptables 源路由”和这篇文章:https://www.linuxquestions.org/questions/linux-software-2/iptables-source-ip-based-gateway-route-681522/

您可以为具有特定网关的 VPN 客户端创建一个特定的路由表(在您的情况下,这将是您的 VPN 连接的端点),然后只需添加指向此路由表的 iptables 规则。

相关内容