AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / ubuntu / 问题 / 1263772
Accepted
codlord
codlord
Asked: 2020-08-02 04:24:04 +0800 CST2020-08-02 04:24:04 +0800 CST 2020-08-02 04:24:04 +0800 CST

可以配置(Squid)代理,以便浏览器可以绕过 VPN?

  • 772

我想做以下事情(如果可能的话):

正常使用 1 个浏览器(比如 Firefox) - 所有流量都使用我的 VPN。有另一个浏览器(比如 Chrome),所有流量都会绕过 VPN。

我已经使用 OpenVPN 设置了带有 VPN 的 PC,并且我了解如何添加静态路由,以便对特定 IP 地址的访问将绕过 VPN。

我认为我想做的可能是通过设置一个(Squid)代理服务器来路由 VPN 之外的所有流量,然后配置 Chrome 浏览器以使用该代理服务器。除非有更好/更简单的方法?

但是我不知道如何完成这个并配置 Squid/routes 尽管做了很多阅读和实验(我不是网络专家),我也无法找到任何资源来告诉我如何(或者如果可能的话) .

任何帮助或信息链接表示赞赏。

networking vpn proxy squid openvpn
  • 3 3 个回答
  • 2459 Views

3 个回答

  • Voted
  1. Kate
    2020-08-09T13:03:26+08:002020-08-09T13:03:26+08:00

    我认为最好的办法是不改变您当前的设置,而是利用Linux 命名空间。为方便起见,您可以使用 nsjail 或 Firejail 等工具。

    这个想法是为应该绕过 VPN 的其他浏览器设置一个专用的命名空间,并使用它自己的路由规则。这就是您所需要的,更改路由规则,使其使用您的常规以太网接口,而不是 OpenVPN 创建的 tun 接口。

    另一个好处是隔离您的应用程序。通过限制他们的范围和他们能够看到的资源,您可以有效地将它们彼此隔离。

    在这里使用 Firejail 是我粗略的做法 - 我鼓励您阅读文档以将配置微调到所需的结果。Firejail 为常见应用程序提供了即用型配置文件,因此它可以立即开始对您的浏览器和其他应用程序进行沙盒处理。

    还有一个 GUI 配置工具(firetools),但我的建议是仅使用一个应用程序尝试 Firejail,而不是重新配置整个环境。

    这是一个使用Python的 PoC (假设您安装了netifaces包)。

    firejail --net=enp4s0 --noprofile python3
    
    >>> 导入网络
    >>> netifaces.interfaces()
    ['lo', 'eth0-11182']
    

    如您所见,Python 只看到一个接口(除了环回接口)。eth0-11182 当然是一个只存在于当前命名空间中的虚拟接口。

    推荐阅读:Firefox 沙盒指南

    • 2
  2. ofirule
    2020-08-08T22:29:33+08:002020-08-08T22:29:33+08:00

    我没有使用过squid,但据我了解,它只是一个常规代理,因此通过将其安装在您的计算机上,它仍然遵循您的操作系统路由规则。

    我会尝试以下设置:

    1. 将 OpenVPN 配置为不更改默认网关
    2. 在运行 OpenVPN 服务器的同一台机器上安装 squid 或其他代理服务

    配置此设置后,您的浏览器默认不会使用 VPN,您可以将其中一个配置为使用服务器的 OpenVPN 子网地址通过代理服务器。

    注意 1:您必须通过 OpenVPN 子网地址而不是其公共 IP 使用代理。

    注意2:不允许从 OpenVPN 子网外部到代理服务器端口的流量,可以使用 iptables 来实现,或者使用您的云提供商规则不打开端口

    更新:

    当使用外部 VPN 服务(例如:nordVPN)时,您无法访问运行 OpenVPN 服务器的机器,这使得上述解决方案无效,因为您无法在运行 OpenVPN 服务器的机器上安装任何东西。

    可以在本地子网中的另一台设备中安装代理服务,并且某些路由器(例如:mikrotik)提供此功能。但这将使解决方案仅在此设置的特定位置上工作。

    • 1
  3. Best Answer
    codlord
    2020-08-13T06:43:28+08:002020-08-13T06:43:28+08:00

    感谢到目前为止的所有想法和评论。我还没有(尚未)firejail使用激活的 VPN(@Anonymous 建议)。但我跟进了@ofirule 链接的建议,特别是这个使用控制组的答案。

    该答案有一个完整的 shell 脚本的链接,可以自动执行所有操作,但我想至少从一开始就手动执行操作,这样我就可以跟进并确保我确切知道我在更改什么。因此,按照那里的手册操作方法,我将在下面发布我为其他人所做的事情。

    请注意,我的网络接口被命名为enp0s31f6并且我的网关 IP 是192.168.0.1我认为这是唯一两个可能需要对其他人进行更改的特定内容:

    # Install required tools
    sudo apt-get install cgroup-lite cgroup-tools
    
    sudo su
    
    # Define a control group named novpn with a classid of 11:11
    cd /sys/fs/cgroup/net_cls
    mkdir novpn
    cd novpn
    echo 0x00110011 > net_cls.classid
    
    # Add mark 11 on packets of classid 0x00110011
    iptables -t mangle -A OUTPUT -m cgroup --cgroup 0x00110011 -j MARK --set-mark 11
    
    # Force the packets to exit through my interface (enp0s31f6) with NAT
    iptables -t nat -A POSTROUTING -m cgroup --cgroup 0x00110011 -o enp0s31f6 -j MASQUERADE
    
    # Define a new "novpn" routing table
    echo 11 novpn >> /etc/iproute2/rt_tables
    
    # Packets with mark 11 will use novpn
    ip rule add fwmark 11 table novpn
    
    # Add a route for default gateway for novpn
    ip route add default via 192.168.0.1 table novpn
    
    # Unset reverse path filtering for all interfaces
    # My PREVIOUS VALUES: lo was 0, others (all, default, enp0s31f6) were 2 in case I need to revert back.
    for i in /proc/sys/net/ipv4/conf/*/rp_filter; do echo 0 > $i; done
    
    exit
    
    # Create control group    
    sudo cgcreate -t $USER:$USER -a $USER:$USER -g net_cls:novpn
    
    # Run app on specific novpn interface (close all browser windows first)
    killall firefox
    cgexec -g net_cls:novpn firefox
    

    我(还)不完全理解以上所有内容,但它有效!:-) 通过cgexec命令运行 firefox 我可以在 VPN 处于活动状态的情况下在 firefox 中检查我的 IP,并且可以看到它报告的是我的实际公共 IP 而不是 VPN IP。我还通过运行在使用 VPN 时遇到问题的无线电流媒体服务证明了这种方法有效 - 现在绕过 VPN 完全可以正常工作。

    • 0

相关问题

  • 如何设置 VLAN 转发?

  • 如何将主机 Ubuntu 上的 VPN (tun0) 网络适配器映射到 VirtualBox 来宾 Windows?

  • 如何限制下载/上传带宽?

  • 如何通过 Windows 网络共享文件?

  • 面板小程序以文本形式显示当前网络流量?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何运行 .sh 脚本?

    • 16 个回答
  • Marko Smith

    如何安装 .tar.gz(或 .tar.bz2)文件?

    • 14 个回答
  • Marko Smith

    如何列出所有已安装的软件包

    • 24 个回答
  • Marko Smith

    无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗?

    • 25 个回答
  • Martin Hope
    Flimm 如何在没有 sudo 的情况下使用 docker? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    Ivan 如何列出所有已安装的软件包 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    La Ode Adam Saputra 无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗? 2010-11-30 18:12:48 +0800 CST
  • Martin Hope
    David Barry 如何从命令行确定目录(文件夹)的总大小? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher “以下软件包已被保留:”为什么以及如何解决? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford 如何删除 PPA? 2010-07-30 01:09:42 +0800 CST

热门标签

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve