5

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

Я бродил, есть ли способ ограничить NIC чем-то вроде сеанса оболочки, поэтому все программы, запускаемые оттуда, используют только этот NIC, например, запуск сеанса bash, который видит только eth1, но не eth0.

редактировать: я думаю, что я ищу что-то похожее на тюрьмы FreeBSD, но для Linux

4 ответа4

1

Если и сетевой адрес, и маски подсети для двух отдельных сетей идентичны, ваша сеть неверно настроена, что противоречит основным намерениям IP-маршрутизации.

Я бы перенумеровал одну из сетей.

1

Ваш вопрос звучит так, как будто это работа для сетевых пространств имен (URL-адрес связан, а не официальный). Использование этой технологии на момент написания статьи было относительно новым, и мне довольно сложно найти краткие инструкции, которые бы также объясняли, что на самом деле происходит с каждой командой. Поиск в ip netns (с кавычками и без них), вероятно, поможет вам начать собирать кусочки.

1

Хм, кажется, я не очень хорошо описываю свою проблему. - @Dart Android В лучшем случае неправильно настроенный вариант описания ситуации неудачен: вы правы, что этот сценарий вызывает конфликт в таблице маршрутизации, но я пытаюсь найти решение для этого, когда два маршрута изолированы друг от друга. , Другое решение будет использовать прокси-сервер NAT, но мне кажется, что это намного сложнее, чем просто запускать виртуализацию Linux внутри виртуальной машины, например, Xen. - @RedGrittyBrick Я не пытаюсь соединить две отдельные сети, я пытаюсь получить доступ к двум отдельным сетевым серверам, которые используют один и тот же IP-блок.

Я нашел два джейл-эквивалента для Linux, которые делают изоляцию сети, кажется, они сделают трюк:

0

Как утверждает Ikraav, это работа для сетевых пространств имен.

Давайте назовем интерфейсы, к которым подключены ваши два сетевых адаптера, eth-a и eth-b .

# Create the network namespaces
ip netns add net-a
ip netns add net-b

# Take interfaces up
ip netns exec net-a ip link set eth-a up
ip netns exec net-b ip link set eth-b up

# Assign the interfaces to the network namespaces
ip link set eth-a netns net-a
ip link set eth-b netns net-b

# Assign an address and network to the interfaces
# Assume IP is 10.0.0.1 for eth-a and 10.0.0.2 for eth-b
# The two can be set equal, if you want them to
ip netns exec net-a ip address add 10.0.0.1/8 dev eth-a
ip netns exec net-b ip address add 10.0.0.2/8 dev eth-b

# Packets to 10.0.0.3 going through eth-a, with a source of 10.0.0.1
ip netns exec net-a ping 10.0.0.3
# Or through eth-b, with a source of 10.0.0.2
ip netns exec net-b ping 10.0.0.3

Если вы предпочитаете иметь интерфейс, который является выходом по умолчанию для программ, не запускаемых внутри сетевого пространства имен, просто оставьте его назначенным сетевому пространству имен и не ставьте перед ним никакие команды с ip netns exec net-*

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