Маршрутизация всего трафика через VPN в Ubuntu Linux

13

После многих часов поиска и устранения неисправностей, поиска потенциальных решений на этом и других сайтах, и я смирился, чтобы попросить совета у моих игроков. Я работаю над маршрутизацией всего сетевого трафика на экземпляре Ubuntu через Cisco VPN в университете. Используя встроенный сетевой менеджер или vpnc, я могу успешно установить соединение с VPN и успешно маршрутизировать трафик на любой университетский IP через VPN. Однако, помимо этих конкретных диапазонов IP-адресов, я не могу придумать какой-либо маршрут, который успешно сопоставит весь сетевой трафик через VPN.

До сих пор я пытался:

добавление маршрута -net 0.0.0.0 gw homeportal dev tun0
добавление маршрута -net 0.0.0.0 tun0
добавление маршрута -net 0.0.0.0 gw 128.122.252.77 dev tun0
route add -net 0.0.0.0 gw 128.122.252.77 dev eth0
iptables -A FORWARD -o tun0 -j ПРИНЯТЬ
iptables -A FORWARD -i tun0 -j ПРИНЯТЬ
iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE

И многие другие глупые, неэффективные вещи, которые я не могу вспомнить достаточно хорошо, чтобы транскрибировать точно.

Кроме того, я пробовал маршрутизировать меньшие диапазоны IP-адресов и конкретные IP-адреса, но безрезультатно. Я не совсем уверен, что происходит не так, как следствия, которые я смог наблюдать, это сбои разрешения имен и сбои маршрутизации трафика через VPN. Что я здесь не так делаю?

Редактировать-

Вот вывод ip route showпосле запуска VPN-соединения с VPNC:

по умолчанию через 192.168.1.254 dev eth0 proto static 
10.0.0.0/8 dev tun0 scope link 
91.230.41.0/24 dev tun0 scope link 
128.122.0.0/16 dev tun0 scope link 
128.122.252.68 через 192.168.1.254 dev eth0 src 192.168.1.32 
128.122.253.46 dev tun0 scope link 
128.122.253.79 dev tun0 scope link 
172.16.0.0/12 dev tun0 scope link 
192.168.0.0/16 dev tun0 scope link 
192.168.1.0/24 dev eth0 прото ядро ​​ссылка на канал src 192.168.1.32 метрика 1 
193.175.54.0/24 dev tun0 scope link 
193.205.158.0/25 dev tun0 scope link 
193.206.104.0/24 dev tun0 scope link 
195.113.94.0/24 dev tun0 scope link 
203.126.200.0/24 dev tun0 scope link 
203.174.165.128/25 dev tun0 scope link 
212.219.93.0/24 dev tun0 scope link 
216.165.0.0/17 dev tun0 scope link

Дополнительная информация-

Я успешно перенаправил произвольный трафик через этот VPN в MS Windows через клиент Cisco AnyConnect с конфигурацией по умолчанию. Вот как выглядит таблица маршрутизации, когда работает клиент 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 On-link 127.0.0.1 306
        127.0.0.1 255.255.255.255 On-link 127.0.0.1 306
  127.255.255.255 255.255.255.255 On-link 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 On-link 192.168.1.13 286
     192.168.1.13 255.255.255.255 On-link 192.168.1.13 286
    192.168.1.254 255.255.255.255 On-link 192.168.1.13 31
    192.168.1.255 255.255.255.255 On-link 192.168.1.13 286
     192.168.31.0 255.255.255.0 On-link 192.168.31.1 276
     192.168.31.1 255.255.255.255 On-link 192.168.31.1 276
   192.168.31.255 255.255.255.255 On-link 192.168.31.1 276
    192.168.128.0 255.255.255.0 On-link 192.168.128.197 257
  192.168.128.197 255.255.255.255 On-link 192.168.128.197 257
  192.168.128.255 255.255.255.255 On-link 192.168.128.197 257
    192.168.203.0 255.255.255.0 On-link 192.168.203.1 276
    192.168.203.1 255.255.255.255 On-link 192.168.203.1 276
  192.168.203.255 255.255.255.255 On-link 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 On-link 127.0.0.1 306
        224.0.0.0 240.0.0.0 On-link 192.168.1.13 286
        224.0.0.0 240.0.0.0 On-link 192.168.203.1 276
        224.0.0.0 240.0.0.0 On-link 192.168.31.1 276
        224.0.0.0 240.0.0.0 On-link 192.168.128.197 10000
  255.255.255.255 255.255.255.255 On-link 127.0.0.1 306
  255.255.255.255 255.255.255.255 On-link 192.168.1.13 286
  255.255.255.255 255.255.255.255 On-link 192.168.203.1 276
  255.255.255.255 255.255.255.255 On-link 192.168.31.1 276
  255.255.255.255 255.255.255.255 On-link 192.168.128.197 10000
================================================== =========================
deftfyodor
источник
Я предполагаю, что будет ясно, что сетевая маршрутизация является для меня совершенно новой, поэтому я был бы признателен за достаточно высокий уровень детализации в ответах.
deftfyodor
1
Было бы полезно, если бы вы могли указать, используете ли вы какой-либо клиент (anyconnect?), И если вы можете опубликовать свою таблицу маршрутизации, спасибо.
MariusMatutiae
Сделайте это, используя ip route, кстати.
user1686
2
Да, пожалуйста, не используйте устаревшие команды маршрутизации: используйте ip route show для таблицы маршрутизации. Устаревшие команды скрывают некоторые сложности, которые возможны и полезны также с VPN, не говоря уже о VLAN, ...
MariusMatutiae
@grawity, @MariusMatutiae - Конечно, я редактировал вопрос с помощью вывода команды. Спасибо за упоминание ip routeкоманды, я не сталкивался с ней раньше.
deftfyodor

Ответы:

3

Ваша локальная сеть - 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 

это, конечно, то, что вы не хотите, потому что он принадлежит вашей локальной сети: таким образом, все ваши вещи маршрутизируются через ваш локальный шлюз, как будто 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 после этого теста и, возможно, даже перезагрузить компьютер, потому что мы только что испортили таблицу маршрутизации.

2) В качестве альтернативы вы можете попробовать перейти на один из разрешенных сайтов (те, которые отображаются в вашей таблице маршрутизации как проходящие через интерфейс tun0 ), а затем выполнить команду:

  ip neigh show

Вы должны получить список устройств, с которыми связались по протоколу ARP, с MAC и IP-адресом; скорее всего, вы получите либо ноль, либо один ответ. Если вы получили один ответ, то это ваш маршрутизатор.

3) Если вы не получили такой ответ, вы можете попробовать с

  sudo nmap -sn 10.0.0.0/8

(что будет очень медленно). Ваш шлюз будет одним из перечисленных, скорее всего, с адресом, оканчивающимся на .1 или .254, если таковой существует.

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 

и попробуйте ориентироваться.

Позвольте мне повторить: поскольку ваш провайдер разрешил трафик только на несколько выбранных IP-адресов через свою VPN, возможно, он принял дополнительные меры (= брандмауэр), чтобы не дать умному пользователю принудительно использовать общий трафик через свою VPN. В этом случае вы ничего не можете сделать. Но если он этого не сделал, вышеуказанные шаги должны помочь вам найти решение.

MariusMatutiae
источник
Спасибо за очень тщательно продуманный ответ, однако во втором тайме я испытываю небольшую икоту. вывод ip addr show dev tun0reads 10: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1412 qdisc pfifo_fast state UNKNOWN group default qlen 500 link/none inet 192.168.128.193/24 brd 192.168.128.255 scope global tun0 valid_lft forever preferred_lft foreverбез адреса однорангового узла, который будет наблюдаться. Кроме того, таблица маршрутизации, которую я разместил ранее, не была изменена мной вообще - она ​​была полностью сгенерирована клиентом vpn.
deftfyodor
@deftfyodor Пожалуйста, смотрите мои изменения.
MariusMatutiae
Используя команду tcpdump, я действительно смог распознать шлюз и направить на него трафик по умолчанию. К сожалению, он все еще работает только для специально подготовленных диапазонов IP-адресов. Я, конечно, склонен полагать, что есть некоторые дополнительные меры безопасности на месте - однако у меня нет никаких проблем с маршрутизацией произвольного трафика через ту же VPN в MS Windows с использованием клиента AnyConnect - так что наверняка должно быть что-то еще.
deftfyodor
@deftfyodor Можете ли вы проверить, отличается ли ваша таблица маршрутизации в Windos от таблицы Linux?
MariusMatutiae
В целом это похоже, хотя есть некоторые элементы, которые отличаются, в частности, 0.0.0.0 настроен на маршрутизацию через мой сетевой маршрутизатор в качестве шлюза, удерживая шлюз VPN в качестве интерфейса. Я отредактировал вопрос, чтобы показать таблицу маршрутизации Windows.
deftfyodor
3

Во всех ваших 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

Теун Винк
источник
2
Я думаю, что второй должен быть ip route, нет? Кроме того , в то время как это всегда хорошая идея , чтобы добавить сетевые маски, то кажется , что routeпредполагает / 0 при добавлении 0.0.0.0
user1686