在 Ubuntu Linux 上通过 VPN 路由所有流量

在 Ubuntu Linux 上通过 VPN 路由所有流量

在花费了数小时进行故障排除、在本网站和其他网站上寻找潜在解决方案之后,我决定向我的上级寻求建议。我正在努力通过大学的 Cisco VPN 路由 Ubuntu 实例上的所有网络流量。使用内置网络管理器或 vpnc,我可以成功建立与 VPN 的连接,并可以通过 VPN 成功将流量路由到任何大学 IP。但是,除了这些特定的 IP 范围之外,我似乎无法想出任何能够成功映射 VPN 上所有网络流量的路由。

到目前为止,我已经尝试过:

路由添加-net 0.0.0.0 gw homeportal dev tun0
路由添加-net 0.0.0.0 tun0
路由添加-net 0.0.0.0 gw 1​​28.122.252.77 dev tun0
路由添加-net 0.0.0.0 gw 1​​28.122.252.77 dev eth0
iptables -A 转发 -o tun0 -j 接受
iptables -A 转发 -i tun0 -j 接受
iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE

还有许多其他愚蠢、无效的事情,我记不太清楚,无法准确地记录下来。

此外,我尝试过路由较小的 IP 范围和特定的 IP,但都无济于事。我不太确定哪里出了问题,因为我能够观察到的影响范围是名称解析失败以及通过 VPN 路由流量失败。我在这里做错了什么?

编辑-

ip route show以下是使用 VPNC 启动 VPN 连接后的输出:

默认通过 192.168.1.254 dev eth0 proto static
10.0.0.0/8 dev tun0 范围链接
91.230.41.0/24 dev tun0 范围链接
128.122.0.0/16 dev tun0 范围链接
128.122.252.68 通过 192.168.1.254 dev eth0 src 192.168.1.32
128.122.253.46 dev tun0 范围链接
128.122.253.79 dev tun0 范围链接
172.16.0.0/12 dev tun0 范围链接
192.168.0.0/16 dev tun0 范围链接
192.168.1.0/24 dev eth0 proto 内核范围链接 src 192.168.1.32 度量 1
193.175.54.0/24 dev tun0 范围链接
193.205.158.0/25 dev tun0 范围链接
193.206.104.0/24 dev tun0 范围链接
195.113.94.0/24 dev tun0 范围链接
203.126.200.0/24 dev tun0 范围链接
203.174.165.128/25 dev tun0 范围链接
212.219.93.0/24 dev tun0 范围链接
216.165.0.0/17 dev tun0 范围链接

更多信息-

我已经在 MS Windows 中通过默认配置的 Cisco AnyConnect 客户端成功路由了此 VPN 上的任意流量。以下是 AnyConnect 客户端运行时的路由表(这是位于同一路由器 192.168.1.254 后面的另一台计算机)。

IPv4 路由表
===========================================================================
活跃路线:
网络目标网络掩码网关接口指标
          0.0.0.0 0.0.0.0 192.168.1.254 192.168.1.13 30
         10.0.0.0 255.0.0.0 192.168.128.1 192.168.128.197 2
      91.230.41.0 255.255.255.0 192.168.128.1 192.168.128.197 2
        127.0.0.0 255.0.0.0 链接上 127.0.0.1 306
        127.0.0.1 255.255.255.255 链接中 127.0.0.1 306
  127.255.255.255 255.255.255.255 链接中 127.0.0.1 306
      128.122.0.0 255.255.0.0 192.168.128.1 192.168.128.197 2
   128.122.252.68 255.255.255.255 192.168.1.254 192.168.1.13 31
       172.16.0.0 255.240.0.0 192.168.128.1 192.168.128.197 2
      192.168.0.0 255.255.0.0 192.168.128.1 192.168.128.197 2
      192.168.1.0 255.255.255.0 链接中 192.168.1.13 286
     192.168.1.13 255.255.255.255 链接中 192.168.1.13 286
    192.168.1.254 255.255.255.255 链接中 192.168.1.13 31
    192.168.1.255 255.255.255.255 链接中 192.168.1.13 286
     192.168.31.0 255.255.255.0 链接中 192.168.31.1 276
     192.168.31.1 255.255.255.255 链接中 192.168.31.1 276
   192.168.31.255 255.255.255.255 链接中 192.168.31.1 276
    192.168.128.0 255.255.255.0 链接中 192.168.128.197 257
  192.168.128.197 255.255.255.255 链接中 192.168.128.197 257
  192.168.128.255 255.255.255.255 链接中 192.168.128.197 257
    192.168.203.0 255.255.255.0 链接中 192.168.203.1 276
    192.168.203.1 255.255.255.255 链接中 192.168.203.1 276
  192.168.203.255 255.255.255.255 链接中 192.168.203.1 276
     193.175.54.0 255.255.255.0 192.168.128.1 192.168.128.197 2
    193.205.158.0 255.255.255.128 192.168.128.1 192.168.128.197 2
    193.206.104.0 255.255.255.0 192.168.128.1 192.168.128.197 2
     195.113.94.0 255.255.255.0 192.168.128.1 192.168.128.197 2
    203.126.200.0 255.255.255.0 192.168.128.1 192.168.128.197 2
  203.174.165.128 255.255.255.128 192.168.128.1 192.168.128.197 2
     212.219.93.0 255.255.255.0 192.168.128.1 192.168.128.197 2
      216.165.0.0 255.255.128.0 192.168.128.1 192.168.128.197 2
        224.0.0.0 240.0.0.0 链接中 127.0.0.1 306
        224.0.0.0 240.0.0.0 链接上 192.168.1.13 286
        224.0.0.0 240.0.0.0 链接上 192.168.203.1 276
        224.0.0.0 240.0.0.0 链接中 192.168.31.1 276
        224.0.0.0 240.0.0.0 链接上 192.168.128.197 10000
  255.255.255.255 255.255.255.255 链接上 127.0.0.1 306
  255.255.255.255 255.255.255.255 链接中 192.168.1.13 286
  255.255.255.255 255.255.255.255 链接中 192.168.203.1 276
  255.255.255.255 255.255.255.255 链接中 192.168.31.1 276
  255.255.255.255 255.255.255.255 链接中 192.168.128.197 10000
===========================================================================

答案1

您的本地网络是 192.168.1.0/24,如路由表中的此行所示:

 192.168.1.0/24 dev eth0  proto kernel  scope link  src 192.168.1.32  metric 1

您的 VPN 网络是 10.0.0.0/8,如下行所示:

 10.0.0.0/8 dev tun0  scope link 

目前,您的默认路由器是:

 default via 192.168.1.254 dev eth0  proto static 

这当然是你该做的不是因为它属于您的本地 LAN:因此您的所有内容都通过本地网关路由,就好像 VPN 不存在一样。

 You do have however, the all-important statement

 128.122.252.68 via 192.168.1.254 dev eth0  src 192.168.1.32  

这是到您的 VPN 提供商的路由。

编辑:

我没有意识到路由表只是从您的 VPN 获得的,无需您的干预。这可能(间接地)表明您的服务提供商只愿意通过接口 tun0 转发表中明确允许的流量,并且可能已采取进一步措施阻止所有其他流量,在这种情况下,您的努力将是徒劳的。

但是,假设您的提供商愿意转发您的所有流量,您需要执行以下步骤。

首先,你需要找出另一端是否有网关愿意接受你的连接,因为我们需要它的 IP 地址。我将给你四种方法来做到这一点。

1)将电脑连接到VPN,尝试以下命令:

   sudo dhclient -v tun0

如果一切顺利,你应该看到包含这一行的回复:

 DHCPOFFER of a.b.c.d from x.y.w.z

xywz 是本地网关的 IP 地址。您可能需要在测试后关闭 VPN,甚至可能需要重新启动 PC,因为我们会把路由表弄乱。

2)或者,您可以尝试导航到其中一个允许的站点(那些在您的路由表中显示为通过tun0界面),然后发出命令:

  ip neigh show

您应该会获得通过 ARP 协议联系的 PC 列表,其中包含 MAC 和 IP 地址;最有可能的是,您会收到零个或一个回复。如果您收到一个回复​​,那么这就是您的路由器。

3)如果你没有收到这样的回复,那么你可以尝试

  sudo nmap -sn 10.0.0.0/8

(这会非常慢)。您的网关将是在列出的 PC 中,最有可能的是地址以 .1 或 .254 结尾的 PC(如果存在的话)。

4)使用tcpdump命令:

  sudo tcpdump -n -i tun0

并查看命令输出的 IP 地址。

如果您对此测试也没有得到适当的答复,则意味着某人确实在他的网络中拧紧了螺丝。

但让我们乐观一点,假设您现在有一个远程路由器的候选 IP 地址 xwyz。您将需要删除默认网关(使用 sudo!):

  ip route del default via 192.168.1.254

添加新的:

  ip route add default via x.w.y.z 

并尝试导航。

让我重复一遍:由于您的提供商仅允许通过其 VPN 向少数选定 IP 地址发送流量,因此他可能采取了额外措施(=防火墙)来阻止聪明的用户强制通过其 VPN 发送通用流量。在这种情况下,您无能为力。但如果他没有这样做,上述步骤应该可以帮助您找到解决方案。

答案2

您的所有route命令都缺少网络掩码,因此它们仅匹配特定0.0.0.0地址,而不是整个互联网。因此,在您尝试的第一个命令中将其替换0.0.0.0为:0.0.0.0/0

ip route add -net 0.0.0.0/0 gw homeportal dev tun0

可能有一个问题,我不确定您的 VPN 客户端是否能自行解决:隧道端点需要排除通过 VPN 路由,它必须通过您的eth0接口进行路由。因此,如果添加此默认路由会破坏您的 VPN,请为您的 VPN 端点添加特定路由:

ip route add <ENDPOINT>/32 dev eth0

相关内容