1

Как я могу разделить трафик на OSX, так что только некоторые определенные подсети направляются на интерфейс Ethernet, а остальные маршрутизируются на Wi-Fi?

Я использую этот скрипт более полутора лет, но сегодня он перестал работать. Все, что он делает, - это удаляет шлюз по умолчанию и устанавливает желаемый шлюз (т.е. en2 = wifi) по умолчанию, и добавляет запись для каждой подсети, сообщая ему о необходимости маршрутизировать его через желаемый "туннельный" интерфейс (т. Е. En0 = ethernet).

#! /usr/bin/env zsh

if (( EUID != 0 )); then
    echo "Please, run this command with sudo" >&2
    exit 1
fi

if [ "$#" -ne "2" ]; then
    echo "Usage: $0 tunnel_interface default_interface" >&2
    exit 1
fi    

TUNNEL_INTERFACE=$1
DEFAULT_INTERFACE=$2

GATEWAY=$(netstat -nrf inet | grep default | grep $DEFAULT_INTERFACE | awk '{print $2}')

if [ "$GATEWAY" = "" ]; then
    read "GATEWAY?Enter gateway IP address: "
fi

echo "Resetting routes with gateway => $GATEWAY"
echo

route -n delete default -ifscope $DEFAULT_INTERFACE 1>/dev/null
route -n delete -net default -interface $TUNNEL_INTERFACE 1>/dev/null
route -n add -net default $GATEWAY 1>/dev/null

for subnet in 10.89 10.153 10.162 10.168 172.24.0.0/13
do
    route -n add -net $subnet -interface $TUNNEL_INTERFACE 1>/dev/null 2>&1
done

echo "google.cz -> $(route get google.cz | grep interface | sed 's/^ *//')"
echo "r5d00 -> $(route get r5d00 | grep interface | sed 's/^ *//')"

Я запускаю этот скрипт так

$ sudo tunnel-ips.sh no en0 en2
Password:
Resetting routes with gateway => 172.20.10.1

google.cz -> interface: en2
r5d00 -> interface: en0

Я подключен через Wi-Fi к моей личной точке iPhone, она назначает мне IP 172.20.10.4 и маску 255.255.255.240. Для сервера r5d00 IP-адрес установлен в 172.24.146.155, что соответствует 172.24.0.0/13.

Моя таблица маршрутизации выглядит следующим образом:$ netstat -rn Таблицы маршрутизации

Internet:
Destination        Gateway            Flags        Refs      Use   Netif Expire
default            172.20.10.1        UGSc            3        0     en2
10.89/16           link#4             UCSc            1        0     en0
10.153/16          link#4             UCSc            1        0     en0
10.162/21          link#4             UCS             6        0     en0
10.162/16          link#4             UCSc            1        0     en0
10.162.0.1/32      link#4             UCS             2        0     en0
10.162.0.1         0:0:c:9f:f0:1      UHLWIi          2        4     en0   1167
10.162.0.241       0:20:4a:e6:5c:2c   UHLWIi          1        0     en0   1149
10.162.0.242       0:20:4a:54:87:a0   UHLWIi          1        0     en0   1079
10.162.0.243       0:20:4a:d7:d8:3e   UHLWIi          1        0     en0   1132
10.162.1.22        0:1e:b:ed:21:b8    UHLWIi          1       18     en0   1136
10.162.7.241/32    link#4             UCS             1        0     en0
10.167/16          link#4             UCSc            1        0     en0
10.168/16          link#4             UCSc            1        0     en0
10.255/16          link#4             UCSc            1        0     en0
127                127.0.0.1          UCS             1        0     lo0
127.0.0.1          127.0.0.1          UH              5     2329     lo0
169.254            link#4             UCS             1        0     en0
169.254            link#5             UCSI            1        0     en2
172.20.10/28       link#5             UCS             1        0     en2
172.20.10.1/32     link#5             UCS             2        0     en2
172.20.10.1        36:e2:fd:74:7b:64  UHLWIir         5       11     en2   1067
172.20.10.4/32     link#5             UCS             1        0     en2
172.24/13          link#4             UCSc            7        0     en0
255.255.255.255/32 link#4             UCS             1        0     en0
255.255.255.255/32 link#5             UCSI            1        0     en2

Internet6:
Destination                             Gateway                         Flags         Netif Expire
::1                                     ::1                             UHL             lo0
fe80::%lo0/64                           fe80::1%lo0                     UcI             lo0
fe80::1%lo0                             link#1                          UHLI            lo0
fe80::%awdl0/64                         link#7                          UCI           awdl0
fe80::a4a8:81ff:fe02:a44d%awdl0         a6:a8:81:2:a4:4d                UHLI            lo0
fe80::%utun0/64                         fe80::db39:e7b8:6234:7841%utun0 UcI           utun0
fe80::db39:e7b8:6234:7841%utun0         link#9                          UHLI            lo0
ff01::%lo0/32                           ::1                             UmCI            lo0
ff01::%awdl0/32                         link#7                          UmCI          awdl0
ff01::%utun0/32                         fe80::db39:e7b8:6234:7841%utun0 UmCI          utun0
ff02::%lo0/32                           ::1                             UmCI            lo0
ff02::%awdl0/32                         link#7                          UmCI          awdl0
ff02::%utun0/32                         fe80::db39:e7b8:6234:7841%utun0 UmCI          utun0

Когда я пинг r5d00, он говорит: "Нет маршрута к хосту"

$ ping r5d00     
PING r5d00.cezdata.corp (172.24.146.155): 56 data bytes
Request timeout for icmp_seq 0
Request timeout for icmp_seq 1
Request timeout for icmp_seq 2
Request timeout for icmp_seq 3
ping: sendto: No route to host
Request timeout for icmp_seq 4
ping: sendto: Host is down
Request timeout for icmp_seq 5
ping: sendto: Host is down
Request timeout for icmp_seq 6
ping: sendto: Host is down
Request timeout for icmp_seq 7
ping: sendto: Host is down
Request timeout for icmp_seq 8
ping: sendto: Host is down
Request timeout for icmp_seq 9
ping: sendto: Host is down
Request timeout for icmp_seq 10

Я скачал Wireshark и записал трафик, но ICMP-пакеты нигде не найти (когда я отключаю Wi-Fi и сбрасываю таблицу маршрутизации, он записывается и пинг проходит успешно). Кажется, что IP не совпадает с записью таблицы маршрутизации, но когда я проверяю его с помощью маршрута get, он говорит, что он маршрутизируется через en0 (что правильно).

$ route get r5d00
   route to: r5d00
destination: r5d00
  interface: en0
      flags: <UP,HOST,REJECT,DONE,LLINFO,WASCLONED,IFSCOPE,IFREF>
 recvpipe  sendpipe  ssthresh  rtt,msec    rttvar  hopcount      mtu     expire
       0         0         0         0         0         0      1500      -138 

Как я уже сказал, вчера это работало, а сегодня нет. Я не скачивал ни обновления, ни чего-либо. AFAIK это проблема на моем Mac, а не во внутренней сети, так как ни у кого больше нет проблем.

1 ответ1

0

Одиночный ping: sendto: No route to host сообщению хоста , что свидетельствует о том, что что-то изменилось во время тестирования. Согласно вашей таблице маршрутизации, 172.24.0.0/13 напрямую подключен к Link # 4, что означает, что для достижения этого хоста не требуется ни маршрутизация, ни даже генерирование этого сообщения.

Впоследствии, кроме первого, другие сообщения отражают таблицу маршрутизации. Параметр ping: sendto: Host is down что хост находится в сети, которая напрямую подключена, и этот хост или его прокси-сервер не ответил на запрос ARP.

Попробуйте повторить проверку route monitor в другом окне, а также просмотрите консоль на предмет любых изменений интерфейса или других сетевых изменений.

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