Я подключил свой iPhone с активной точкой доступа к моей машине с Ubuntu через USB.

В зависимости от типа сетевой активности (например, просмотр vs ssh), я хочу переключаться между сетевыми подключениями (usb-wired против lan).

Есть ли команда, которая позволяет мне переключаться на лету?

Изменить: я ищу более простое решение, только то, которое заменяет без меня, чтобы вытащить кабель.

Мои сессии являются отдельными. Это буквально - эй, я должен проверить свою личную электронную почту, но я не хочу делать это на сервере моей компании. Итак, я ищу решение, подобное этому

2 ответа2

3

Обычно, когда я оказываюсь в таких ситуациях, я использую статические маршруты для разделения трафика. Но это зависит от того, знаете ли вы сайты, к которым вы подключаетесь. Но это может быть легко сделано в сценарий, который может быть выполнен, когда вам это нужно, и изменения являются энергонезависимыми.

Хитрость заключается в том, чтобы решить, какой интерфейс должен быть маршрутом по умолчанию, и после этого добавить статические маршруты для пунктов назначения, которые вы хотели бы выбрать другим путем. Для этого я использую команду ip .

ip route add 1.3.3.7/32 через 192.168.10.1

ip route add 1.4.4.0/24 через 192.168.10.1

Более продвинутым и постоянным решением было бы сделать это с помощью iptables, что также позволяет использовать более детальные правила. Взгляните на это руководство, я не буду делать то, что вы просили, но в нем есть основы того, как использовать iptables для балансировки нескольких шлюзов.

0

Userspace не должен быть в состоянии выбрать маршрут, который он использует. Если вы просто хотите использовать один маршрут для трафика SSH и один для трафика HTTP, выполните следующие действия. Обратите внимание, что подход ниже используется потому, что мы маршрутизируем на основе адреса назначения уровня 4. Если бы это было только на основе IP, вы могли бы просто добавить дополнительные маршруты.

Не забудьте заменить IP-адреса, номера портов и имена интерфейсов в зависимости от ситуации. У меня есть правила udev для переименования ссылки на iPhone на основе MAC-адреса. Вы не можете, и это, вероятно, будет отображаться как другое устройство eth *. Номера таблиц и меток могут быть изменены, если они соответствуют друг другу, как сейчас.

  1. Создайте таблицу маршрутизации со шлюзом по умолчанию для каждой ссылки.

    ip route add 172.20.10.0/24 dev iphone0 table 1234
    ip route add default via 172.20.10.1 dev iphone0 table 1234
    
    ip route add 192.0.2.0/24 dev eth0 table 4321
    ip route add default via 192.0.2.1 dev eth0 table 4321
    
  2. Так как IP правило маршрутизации только то, что IP-слой, знак трафик , предназначенный для какой бы ни линии связи, используя IPTables. Обратите внимание, как это предварительная маршрутизация.

    iptables -t mangle -A PREROUTING -p tcp --dport 22 -j MARK --set-mark 1
    iptables -t mangle -A PREROUTING -p tcp --dport 80 -j MARK --set-mark 2
    
  3. Создайте правила маршрутизации для работы с несколькими шлюзами по умолчанию. Они должны быть на первом месте, так как они заставляют трафик возвращаться из того же интерфейса, откуда он пришел, а не из другого, если, например, вы изменили, какой интерфейс должен использовать трафик SSH.

    ip rule add from 172.20.10.2 table 1234 priority 1000
    ip rule add from 192.0.2.2 table 4321 priority 1001
    
  4. (Необязательно, если только трафик в одной подсети не маршрутизируется шлюзом в другой подсети - например, может быть трафик RFC 1918). Создайте правила маршрутизации, чтобы принудительно передавать трафик в подсети, к которым вы напрямую подключены, через соответствующий интерфейс, независимо от того, из того, что вы указали в качестве ссылки, которая будет использоваться для определенного типа трафика.

    ip rule add to 172.20.10.0/24 table 1234 pref 1002
    ip rule add to 192.0.2.0/24 table 4321 pref 1003
    
  5. Создать правила маршрутизации

    ip rule add fwmark 1 table 1234 pref 1004
    ip rule add fwmark 2 table 4321 pref 1005
    
  6. Установите шлюз по умолчанию для всего другого трафика.

    ip route add default via 192.0.2.1 dev eth0 # implicit "table main" here
    

Что касается изменения того, какое соединение используется на лету, в официальных репозиториях не должно быть команды (если она вообще написана и опубликована). Вам нужно написать скрипт, который будет просто читать существующее правило из RPDB, вычислять «противоположную» таблицу, удалять старое правило и создавать правило для помеченного трафика для использования другой таблицы. Например:

#! /bin/sh

case $1 in
  ssh)  PREF=1004
  http) PREF=1005
  *)    echo "Unknown." 1>&2; exit 1
esac

TABLE=`ip rule list | grep ^$PREF: | awk '{print $NF}' | rev`
ip rule del pref $PREF
ip rule add fwmark 1 table $TABLE pref $PREF

Здесь выбор номера таблицы сверху имеет значение, потому что я использую дешевый трюк для «переключения» номера таблицы.

Не проверено, так как у меня нет того, что мне нужно.

Вышесказанное можно обобщить на другие ситуации с двумя ссылками и разными схемами адресации.

Также, если вы используете OpenSSH, у него есть флаг для указания адреса, к которому будет привязан, -b . Так как вышеперечисленное настроило правила для маршрутизации на основе исходного адреса, вы можете просто выполнить ssh -b insert_iphone_address_here user@example.com или другой адрес, чтобы выбрать, какой маршрут выбрать. Я не знаю ни одного из основных браузеров, позволяющих пользователю устанавливать адрес привязки.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .