linux – 基于每个应用程序的路由

我在我的Ubuntu Linux工作站(Astrill)上使用专有的VPN客户端,它支持几种类型的VPN.其中一种VPN类型是OpenVPN,它在连接时创建虚拟接口tun0.

令我感到困惑的是,当我在客户端选择OpenVPN时,我可以选择仅通过VPN路由来自计算机上某些应用程序的流量,而来自其他应用程序的流量不使用VPN并通过物理离开我的计算机接口.

我想我有点理解Linux中的路由是如何工作的,但是我无法看到/理解这个VPN客户端如何管理每个应用程序的不同流量.

当我启用此每应用程序路由时,我可以看到客户端将以下条目添加到路由表中,但没有其他内容:

198.18.32.0/21 dev tun0  proto kernel  scope link  metric 950

没有一个IPTables规则,因此不是通过IPTables完成的.

有人知道它可能会这样做吗?

解决方法:

通过在Linux上设置NameSpaces可以实现这一点,您可以拥有不同的进程来拥有不同的网络或路由.
例如,要创建名为test的新命名空间:
ip netns添加测试

要分配网络接口(或隧道接口):
ip link set tun0 netns test

A network interface can just be active in one namespace at a time.

要在该命名空间中执行程序,您可以执行以下操作:
ip netns exec test<命令对该命名空间运行>

more info on ip net-ns
more info on namespace

上一篇:Playframework2像春天的反向布线


下一篇:windows下ElasticSearch7.x集群开启X-Pack安全认证功能以及与Kibana连接