Вторичный 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.