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

Создать новую подсеть поверх существующей подсети

У меня есть три сервера с IP-адресами 192.168.1.1, 192.168.1.2 и 192.168.1.3. Они могут видеть друг друга и разговаривать друг с другом. Я хотел бы создать вторую подсеть поверх 192.168.1.x, то есть 10.170.x.x.

Я могу назначить IP-адрес каждому из трех серверов, 10.170.0.1, 10.170.0.2 и 10.170.0.3, с ip addr add 10.170.0.1 dev eth0. Проблема, с которой я столкнулся, заключается в том, как выполнить маршрутизацию. Я не могу пинговать ни один сервер в сети 10.170.x.x. Я считаю, что мне нужно создать несколько одноранговых мостов, но я понятия не имею, с чего начать. Любые идеи?

Как было отмечено другими, когда вы используете ip address add и не указывайте сетевую маску или диапазон CIDR, /32 предполагается, поэтому маршруты для подсети не создаются.

Чтобы решить эту проблему, вы также добавляете диапазон CIDR:

ip addr add 10.170.0.1/16 dev eth0

Чтобы внести изменения стойкий вы добавляете это к /etc/network/interfaces. Это можно сделать дешевым и грязным способом через post-up команда, но правильный способ - добавить вторую строфу, содержащую только этот адрес:

auto eth0
iface eth0 inet static
    address 192.168.1.1
    netmask 255.255.255.0
    gateway 192.168.1.250

iface eth0 inet static
    address 10.170.0.1
    netmask 255.255.0.0

В частности, обратите внимание, что, несмотря на то, что вы прочитаете в устаревших Интернет-руководствах, вам следует не использовать eth0:0 для второго IP-адреса. Эта форма устарела и использовалась в течение многих лет (что означает, что она, вероятно, будет удалена из Linux в любое время).

Попробуйте сделать ip addr add 10.170.0.1/16 dev eth0 так что вы указываете сетевую маску. Бьюсь об заклад, они добавляют в IP-пространство / 32 в противном случае (хотя я этого не подтверждал).

Это интересная проблема, для которой существует ряд решений. Формулировка вашего вопроса оставляет некоторые вопросы, но я думаю, что из контекста я понимаю, что вы пытаетесь сделать.

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

Я действительно думаю, что ответ Эрика Ренуфа, приведенный выше, очень популярен - по умолчанию iproute2, вероятно, добавит 32-битную сетевую маску - 255.255.255.255 - что правильно в ряде ситуаций, когда требуется / требуется маршрутизация, например у крупного хостинг-провайдера, где у некоторых машин есть несколько IP-адресов, раздающихся с течением времени. Вам, вероятно, понадобится 24-битная сетевая маска - 255.255.255.0 - или даже 16-битная, если вы действительно собираетесь использовать все пространство 10.170.x.x.

Кроме того, бит адресов «.x.x» является здесь действительно важной деталью. Обычно мы описываем сеть, используя «сетевой адрес», нижний адрес в определенном диапазоне подсетей. В этом случае ваши сетевые адреса 192.168.1.0/24 и 10.170.0.0/16. Возможны подсети меньше, чем размер класса C / 24 бита, где сетевой адрес не равен нулю. Я не буду вдаваться в подробности, но настоятельно рекомендую потратить некоторое время на изучение подсетей.

Теперь, когда мы знаем, как избежать использования маски сети по умолчанию и почему, рассмотрим:

ip addr del 10.170.0.1 dev eth0
ip addr add 10.170.0.1/16 dev eth0

Повторите на каждой машине. Если вы хотите, чтобы они были настроены при загрузке, также рассмотрите возможность добавления этой строки в качестве команды post-up в / etc / network / interfaces.

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

Мне удалось заставить это работать, добавив маршрут с исходным адресом:

для машины 192.168.1.1 / 10.170.0.1 это будет

$ ip route add 10.170/16 dev eth0 src 10.170.0.1

в более общем смысле

$ ip route add 10.170/16 dev eth0 src "ip address of host"

Я думаю, что правильный способ сделать это:

  • создать подынтерфейсы (например, eth0: 1) для новой подсети,
  • назначить субинтерфейсы для VLAN с тегами (вам может потребоваться установить пакет vlan, если ваш хост - Linux)
  • настройте VLAN с тем же идентификатором на вашем маршрутизаторе И вы переключаетесь,
  • выполните обычную маршрутизацию на основе пункта назначения между сетью 198.168.1.x и сетью 10.170.x.x с вашим маршрутизатором.

Это может работать или не работать, если серверы подключены к неуправляемому коммутатору, но с «умными» или управляемыми коммутаторами это не проблема.

У меня эта конфигурация работает с 2 сетями IPv6 от разных провайдеров с кучей хостов с одним интерфейсом Ethernet, взаимодействующим в обеих сетях, и она отлично работает.

Вам просто нужно проверить свою маршрутизацию, я думаю, вы просто это пропустили.

ip route show

Вероятно, что здесь не удалось, так это то, что вы назначили IP-адрес каждому хосту без указания маски сети, вы можете попробовать это, выполнив

ip add add 10.170.0.1/24 dev eth0

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

Если вы просто хотите добавить запись маршрутизации

ip route add 10.170.0.0/24 dev eth0

Есть ли на сервере виртуальные машины? в таком случае вы можете рассмотреть возможность добавления дополнительных интерфейсов.

Однако, как упоминалось другими, просто добавьте IP-адреса с соответствующей сетевой маской, и два хоста смогут обмениваться данными.

ctxadm@ctx-router1:~$ sudo ip addr add 10.75.0.5/24 dev eth1

Доказательство от 2 debian, запущенного на vmware:

ctxadm@ctx-router1:~$ sudo ip addr list eth1
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
   link/ether 00:0c:29:a4:1f:e6 brd ff:ff:ff:ff:ff:ff
   inet 10.92.0.254/24 brd 10.92.0.255 scope global eth1
   inet 10.75.0.5/24 scope global eth1

ctxadm@web1:~$ sudo ip addr list eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
   link/ether 00:0c:29:22:1a:8a brd ff:ff:ff:ff:ff:ff
   inet 10.92.0.20/24 brd 10.92.0.255 scope global eth0
   inet 10.75.0.6/24 scope global eth0

ctxadm@ctx-router1:~$ ping 10.75.0.6
   PING 10.75.0.6 (10.75.0.6) 56(84) bytes of data.
   64 bytes from 10.75.0.6: icmp_req=1 ttl=64 time=0.157 ms
   64 bytes from 10.75.0.6: icmp_req=2 ttl=64 time=0.185 ms

ctxadm@ctx-router1:~$ sudo arp -a
   ? (192.168.0.20) at 20:cf:30:7f:6c:3e [ether] on eth0
   ? (10.75.0.6) at 00:0c:29:22:1a:8a [ether] on eth1
   ? (192.168.0.1) at 00:10:18:de:ad:05 [ether] on eth0

Это оно !

Для отладки используйте tcpdump, проверьте запись arp ..