我使用基于 UID 的策略路由,即具有特定 UID 的进程被强制/通过 VPN 隧道传输。这是通过数据包标记完成的,如以下链接所示; 关联. 这一切都在 Debian Stretch (9) 上。
通过 VPN 隧道传输的进程之一(即 plex)需要通过非 VPN 路由访问 plex.tv 服务器,以启用“远程访问”
我在 Windows 和 Debian 上已经完成了此操作,只需添加一条从服务器到 plex.tv 的路由即可绕过 VPN。如果所有网络流量都通过 VPN 路由(即未启用上述基于策略的路由),则此方法有效。
当我启用基于策略的路由时,添加路由不起作用,我假设是因为数据包被标记为 UID,因此通过 VPN 进行路由(通过路由表)。
我尝试并研究过很多想法,但都没有奏效。
1) 有没有办法“取消标记”之前标记的数据包?我试过这个,但找不到取消标记之前标记的数据包的方法。我想我可以取消标记与 plex.tv(或其 IP 地址)通信的数据包,这样它们就不会通过 VPN。
2) 我假设数据包和 iptables 的标记优先于指定的路由。有没有办法让添加的路由优先于 iptables 中指定的规则?
3) 然后我尝试在 iptables 链的顶部添加一条 iptables 规则,该规则将接受与 plex.tv 的 IP 地址的通信。我以为它可能会匹配此规则并退出链,但它似乎仍然应用其余规则。
4) 我在想这可能与 DNAT 有关?但我还不太清楚如何创建该规则。
读过这篇文章的人中是否有人知道或知道可以提供解决方案的方法。任何帮助都将不胜感激。
H
答案1
- “取消标记” - ... --set-mark=0 ...
- 路由规则(ip 规则...)与 Debian 中的 fwmark 不兼容... :( 尝试其中一个 RH 分支。我使用过 OpenSUSE。