Назад | Перейти на главную страницу

Как хост маршрутизирует IP-пакеты, если он получает два IP-адреса?

Чтобы прояснить мой вопрос ...

Мне интересно, как ядро ​​Linux маршрутизирует пакеты на многоквартирный дом хост?

Под словом «multi-home» я подразумеваю, что у хоста есть несколько сетевых адаптеров для отправки пакетов, например, мой Debian в Virtualbox имеет два сетевых адаптера.

eth0 обеспечивает поддержку NAT. Я не знаю, как Virtualbox это удается. Я имею в виду, что на моем хосте Windows нет виртуального сетевого адаптера с IP-адресом 10.0.2.x.

eth1 обеспечивает поддержку только для хоста. Я использую эту небольшую сеть, чтобы изучить протокол TCP / IP и провести несколько небольших экспериментов. Я вручную настраиваю его на IP-адрес 192.168.56.2, шлюз 192.168.56.1, последний IP-адрес является IP-адресом виртуального сетевого адаптера Virtualbox.

операционная система хоста Я использую ADSL для подключения к Интернету и получаю случайный IP-адрес, например, 118.249.xxx.113.

Так что вопрос выходит, как ядро ​​linux маршрутизирует IP-пакеты? Я имею в виду, что если я выполнил следующие команды, я не смогу подключиться к Интернету.

ifup eth0
ifup eth1
пинг www.google.com

этот пинг не вернет ответа.

Так получается, что после настройки eth1 ядро ​​будет использовать eth1 как дефолт Сетевая карта, которая находится в сети только для хоста, для отправки IP-пакетов? В результате в Debian я не могу подключиться к внешнему Интернету?

Другой простой вопрос так как eth1 теперь является сетевым адаптером по умолчанию, будет ли ядро ​​Linux пытаться использовать сетевой адаптер eth1 для отправки пакетов, если eth0 не смог найти доступную запись маршрута?
Если будет, то как его настроить?

Вот моя сетевая конфигурация Debian Linux в Virtualbox.

eth0  Link encap:Ethernet  HWaddr 08:00:27:ec:d9:bb  
              inet addr:10.0.2.15  Bcast:10.0.2.255  Mask:255.255.255.0
              inet6 addr: fe80::a00:27ff:feec:d9bb/64 Scope:Link
              UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
              RX packets:1690 errors:2 dropped:0 overruns:0 frame:0
              TX packets:1129 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:1000 
              RX bytes:2276172 (2.1 MiB)  TX bytes:62647 (61.1 KiB)
              Interrupt:11 Base address:0xd020 


eth1      Link encap:Ethernet  HWaddr 08:00:27:ae:e1:69  
          inet addr:192.168.56.2  Bcast:192.168.56.255  Mask:255.255.255.0
          inet6 addr: fe80::a00:27ff:feae:e169/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:48 errors:0 dropped:0 overruns:0 frame:0
          TX packets:17 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:5985 (5.8 KiB)  TX bytes:1334 (1.3 KiB)
          Interrupt:10 Base address:0xd240 

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:8 errors:0 dropped:0 overruns:0 frame:0
          TX packets:8 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:560 (560.0 B)  TX bytes:560 (560.0 B)

и таблица маршрутов следующая:

Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
10.0.2.0        0.0.0.0         255.255.255.0   U         0 0          0 eth0
192.168.56.0    0.0.0.0         255.255.255.0   U         0 0          0 eth1
0.0.0.0         192.168.56.1    0.0.0.0         UG        0 0          0 eth1
0.0.0.0         10.0.2.2        0.0.0.0         UG        0 0          0 eth0


thanks.
jcyang.

У вас есть два маршрута по умолчанию. Я когда-либо использовал только по одному, но думаю, два не будут проблемой --- насколько мне известно, таблица маршрутизации отсортирована по специфичности (количество бит в маске подсети назначения по возрастанию) и возможно MTU (хотя я так не думаю в Linux). Затем будет использован первый соответствующий маршрут по умолчанию в отсортированном списке.

В любом случае попробуйте удалить один из маршрутов по умолчанию (route del ... как упоминали другие или ip route del ...).

В противном случае ... почему ваш пинг не получает ответа? Это похоже на проблему с брандмауэром. Возможно, Linux автоматически выполняет балансировку нагрузки / циклический перебор с двумя маршрутами по умолчанию, но я никогда не слышал, чтобы Linux делал это, и это может создать проблемы для некоторых протоколов, поэтому я сомневаюсь в этом.

Если у вас есть проблемы с маршрутизацией, пинг, вероятно, должен сказать «нет маршрута к хосту» или что-то в этом роде. Никакой ответ не отличается. Убедитесь, что ping определяет IP из имени хоста в порядке. Если нет, то проблема в DNS. Если это так, посмотрите на свой брандмауэр - iptables -L -n -v предоставит вам какие-либо правила и сколько раз они были сработаны. Если правило увеличивается так же часто, как ваши пинги, скорее всего, проблема в этом. В противном случае проверьте пакеты, отправляемые и входящие в машину, с помощью wirehark.

Ваш вопрос сбивает с толку, но позвольте мне попробовать.

Во-первых, если вы хотите иметь простой маршрутизатор NAT / маскарадинга, есть несколько простых адаптируемых руководств о том, как это сделать с помощью netfilter (iptables). Включить такое поведение может быть обманчиво просто. Погуглите "linux nat" или "linux masquerade".

редактировать: добавление основных команд для хорошей меры. Убедитесь, что вы знаете, какой интерфейс какой!

/sbin/iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
/sbin/iptables -A FORWARD -i eth0 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT
/sbin/iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT

В противном случае вы должны просто иметь возможность использовать команду route для удаления «лишних» шлюзов и принудительного вывода всего трафика через eth1, если это ваша цель (в этом сценарии вам не нужен eth0, если я вас правильно понимаю).

route del gw 10.0.2.2 eth0 

Должен помочь в последнем сценарии. (Если я правильно вас понимаю, то, возможно, нет.)

Надеюсь, это поможет.

Я не уверен, что правильно понимаю проблему, но сделайте «echo 1> / proc / sys / net / ipv4 / ip_forward», чтобы включить маршрутизацию. Сделайте его постоянным, отредактировав /etc/sysctl.conf. Если для этого параметра установлено значение 1 (включено), Linux будет пересылать пакеты, полученные с одного интерфейса Ethernet, на другой - он будет действовать как маршрутизатор.
Если у вас есть машина с двумя домами - два способа выхода в Интернет - вы не можете использовать оба восходящих канала только с двумя установленными шлюзами по умолчанию ... Что вы можете сделать, так это выбрать основной шлюз по умолчанию, скажем 192.168.56.1 а затем выберите несколько сетей, которые вы хотите получить через вторичную ссылку:
ip route add default via 192.168.56.1
ip route add 221.x.x.x/24 via 10.10.10.2
ip route add 99.99.99.99/32 via 10.10.10.2

Итак, позвольте мне объяснить вам некоторые основы на вашем примере. У вас есть 2 Nics (виртуальные или неважные). Оба находятся в разных сетях. 10.0.2.0 и 192.168.56.0

Первые две записи в таблице маршрутизации показывают, что у них нет специального шлюза (0.0.0.0), а последний столбец показывает, к какому сетевому адаптеру они подключены.

Значит, в таблице маршрутизации есть ошибка. У вас есть две записи для шлюза по умолчанию. У вас может быть только один реальный шлюз по умолчанию. Обычно IP-пакеты отправляются на первый gw по умолчанию, найденный в таблице маршрутизации. (Я думаю, в вашем случае это не тот)

Я не знаю, как именно работает NAT (я когда-либо использовал мостовую сеть). Итак, у вас есть два варианта. Установите шлюз по умолчанию на IP-адрес вашего РЕАЛЬНОГО IP-адреса машины. Например. если ваша машина за пределами вашего виртуального бокса имеет IP 10.0.2.254, установите ваш шлюз по умолчанию на 10.0.2.254. (В NAT Enviroment вы должны настроить свою машину за пределами вашего виртуального бокса, чтобы поддерживать это, ipfilter должен быть настроен правильно, а маршрутизация пакетов между интерфейсами должна быть включена echo 1 > /proc/sys/net/ipv4/ip_forward).

Если вы используете мостовую установку, ваш компьютер будет напрямую подключен к вашему маршрутизатору, который подключен к Интернету. Вам нужно только настроить IP-адрес этой сети и настроить шлюз по умолчанию для IP-адреса вашего маршрутизатора. например VBOX 10.0.2.2 ------- МАШИНА ВНЕ VBOX 10.0.2.254 ------ Маршрутизатор подключен к Интернету 10.0.2.1

Тогда ваш шлюз будет 10.0.2.1