Вторичный IP в собственном пространстве имен netns

Есть ли способ, которым я могу переместить вторичный IP в свое собственное пространство имен, сохраняя первичный IP на исходном устройстве?

Если у меня есть устройство 10.0.0.1 и 10.0.0.2 на устройстве eth0, но я хочу, чтобы 10.0.0.2 находился в своих собственных сетях test ближе всего к этому я добавлю пару веток и мост и перенесу первичный IP eth0 на мост:

  netns: test              netns: default
==============     ===============================
vethB:10.0.0.2 <-> vethA <-> br0:10.0.0.1 <-> eth0

К сожалению, удаление 10.0.0.1 IP из eth0 приведет к путанице в нескольких непрозрачных унаследованных приложениях, поэтому я бы предпочел оставить это на eth0.

2 ответа

Решение

Linuxmacvlan устройство является работоспособным решением здесь.

Он создает субинтерфейс уровня 2, который является добросовестным логическим устройством, в отличие от eth0:1 административный вымысел для управления вторичными IP-адресами, которые я затем могу переместить в пространство имен и адресов сети. Пример:

#  netns: test        netns: default
# ==============     ================
# test0:10.0.0.2 <->  eth0:10.0.0.1

# Create "test" network namespace
ip netns add test
ip netns exec test ip link set lo up

# Create subinterface and move to "test"
ip link add link eth0 name test0 type macvlan
ip link set test0 netns test

# Configure the subinterface
ip netns exec test ip addr add 10.0.0.2/24 brd + dev test0

Это сохраняет "основной" IP на eth0 и таким образом держит существующую систему более или менее не осведомленной о моем скрытом "вторичном" IP.

Данное устройство может находиться только в одном пространстве имен, см. https://lwn.net/Articles/580893/:

Помимо петлевого устройства, каждое сетевое устройство (физические или виртуальные интерфейсы, мосты и т. Д.) Может присутствовать только в одном пространстве имен сети.

Так что ваши eth0 может быть только в одном. Ваша установка с двумя виртуальными интерфейсами и мостом является решением этой проблемы. Я не понимаю, что это меняет для приложений, если IP привязан к br0 вместо eth0, они не должны видеть разницу. В противном случае вам нужно будет предоставить более подробную информацию. У вас действительно были проблемы, и если да, то какие, или вы просто ожидаете их?

Если вы можете их использовать, взгляните на VLAN: вы можете поместить каждую из них (вне одного физического интерфейса) в разные пространства имен. Это подробно здесь: https://blog.scottlowe.org/2014/03/21/a-follow-up-on-linux-network-namespaces/

Если вы не можете использовать мост или виртуальные локальные сети, вам необходимо настроить переадресацию IP или NAT.

Другие вопросы по тегам