Создать дополнительный IP-адрес в отдельном сетевом пространстве имен

$ printf '4m1\n,p\n' | ed -s file
line 1
line 4
line 2
line 3

Короткий edсценарий

4m1
,p

переместит четвертую строку после первой, а затем отобразит содержимое буфера редактирования в терминале.

Чтобы сохранить результат в новый файл,вы можете использовать перенаправление, например

printf '4m1\n,p\n' | ed -s file >newfile

или вы можете указать edсохранить файл с помощью

printf '4m1\nw newfile\n' | ed -s file

Команда w newfileсохранит отредактированный буфер в указанный файл. Команда wбез имени файла сохранит файл с исходным именем.

Поскольку построчный редактор edсчитывает файл в память, его можно использовать для подобных целей, если файл имеет разумный, но не слишком большой размер (меньше гигабайт ).


Чтобы переместить последнюю строку, измените 4на $в приведенных выше командах.

1
04.12.2020, 17:06
1 ответ

Похоже, macvlan не работает через Wi-Fi, подробности см. в https://unix.stackexchange.com/a/555676. Можно заставить его работать как через Wi-Fi, так и через Ethernet, используя тип ipvlan mode l2 вместо тип macvlan .

Вот моя полная настройка, которая создает 3 IP-адреса, каждый в своем собственном сетевом пространстве имен:

sudo ip link del hostnet ||:
sudo ip link add hostnet link wlp2s0 type ipvlan mode l2
sudo ip addr add 192.168.0.90/32 brd + dev hostnet
sudo ip link set hostnet up  # `ip route add' below needs it.

for I in 91 92 93; do
sudo ip netns del net"$I" && sleep.5 ||:
sudo ip netns add net"$I"
sudo ip netns exec net$I ip link set lo up
sudo ip link add link wlp2s0 name net"$I"in type ipvlan mode l2
sudo ip link set net"$I"in netns net"$I"
sudo ip netns exec net"$I" ip addr add 192.168.0."$I"/24 brd + dev net"$I"in
sudo ip netns exec net"$I" ip link set net"$I"in up
sudo ip netns exec net"$I" ip route add default via 192.168.0.1
sudo ip route add 192.168.0."$I"/32 dev hostnet
done

Это делает, например,. ping 192.168.0.91, ping 192.168.0.92, ping 192.168.0.93, ping 192.168.0.130и ping 192.168.0.12работают во всех 5 участниках :пространство имен корневой сети хоста (IP-адрес 192.168.0.130 ), каждый 3 :хост net"$I"сетевое пространство имен (IP-адрес 192.168.0.91 и т. д. ), другие узлы в локальной сети (IP-адрес, например 192.168.0.12 ).

Это также позволяет TCP-соединениям и UDP-пакетам работать в любом направлении между любым из 5 участников.

Это также обеспечивает работу UDP-трансляций между любым из 5 участников. Это установлено пунктами brd +выше. Хотя, похоже, этот пункт не нужен, потому что вещание включено по умолчанию.

TCP-подключения имеют правильный IP-адрес, за исключением того, что для TCP-подключений из корневого сетевого пространства имен узла к сетевому пространству имен узла net"$I"отображается входящий IP-адрес 192.168.0.90 вместо 192.168.0.130.

Сетевое пространство имен хоста net"$I"может подключаться к корневому сетевому пространству имен хоста, используя либо IP-адрес 192.168.0.90, либо 192.168.0.130.

3
18.03.2021, 22:45

Теги

Похожие вопросы