У меня есть три сервера с 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"
Я думаю, что правильный способ сделать это:
Это может работать или не работать, если серверы подключены к неуправляемому коммутатору, но с «умными» или управляемыми коммутаторами это не проблема.
У меня эта конфигурация работает с 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 ..