Есть ли способ переместить вторичный IP-адрес в собственное пространство имен, сохранив при этом первичный IP-адрес на исходном устройстве?
Если у меня на устройстве 10.0.0.1 и 10.0.0.2 eth0, но я хочу, чтобы 10.0.0.2 находился в собственном netns test
, ближе всего к этому я пришел к добавлению veth пара и мост, и перемещение eth0 основной IP-адрес моста:
netns: test netns: default
============== ===============================
vethB:10.0.0.2 <-> vethA <-> br0:10.0.0.1 <-> eth0
К сожалению, перемещение 10.0.0.1 IP из eth0 запутает несколько непрозрачных устаревших приложений на коробке, поэтому я бы предпочел оставить это включенным eth0.
В Linux macvlan
устройство - работоспособное решение здесь.
Он создает субинтерфейс уровня 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/
Если вы не можете использовать мост или VLAN, вам необходимо настроить переадресацию IP или NAT.