LINUX.ORG.RU
решено ФорумAdmin

Виртуальная сеть для nspawn

 , ,


1

2

Пытаюсь настроить виртуальную сеть для контейнеров в systemd-nspawn. Задача не пробросить реальный интерфейс в контейнеры через мост, а именно создать виртуальную сеть для общения контейнеров между собой, контейнеров и хоста и доступа контейнеров в интернет.

Как это проще всего можно сделать?

P.S. DHCP не нужен.

★★

Ответ на: комментарий от FireFighter

В том и дело, что не получается...

Сделал так:

> cat /etc/systemd/network/nspawn-bridge.netdev 
[NetDev]
Name=nspawn-br
Kind=bridge
> cat /etc/systemd/network/nspawn-bridge.network 
[Match]
Name=nspawn-br

[Network]
# give the bridge a ip
Address=192.168.5.1/24
# basically does sysctl net.ipv4.ip_forward but only for this device
# also see this bug https://bugs.freedesktop.org/show_bug.cgi?id=89509
IPForward=yes
# turn on the NAT
IPMasquerade=yes
# run a simple dhcp server on that bridge so that the containers wouldn't sit in the dark
DHCPServer=yes
> cat /etc/systemd/network/ethernet.network 
[Match]
Name=eth*

[Network]
DHCP=yes
IPForward=yes
> ifconfig 
eth0      Link encap:Ethernet  HWaddr 52:54:00:26:e5:0e  
          inet addr:192.168.1.16  Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: fe80::5054:ff:fe26:e50e/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:3848 errors:0 dropped:208 overruns:0 frame:0
          TX packets:2181 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:277096 (270.6 KiB)  TX bytes:389337 (380.2 KiB)

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

nspawn-br Link encap:Ethernet  HWaddr 86:c5:23:69:8d:63  
          inet addr:192.168.5.1  Bcast:192.168.5.255  Mask:255.255.255.0
          inet6 addr: fe80::84c5:23ff:fe69:8d63/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:50 errors:0 dropped:0 overruns:0 frame:0
          TX packets:26 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:5660 (5.5 KiB)  TX bytes:2920 (2.8 KiB)

vb-comsrv Link encap:Ethernet  HWaddr f2:1a:c8:1d:5b:a2  
          inet6 addr: fe80::f01a:c8ff:fe1d:5ba2/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:23 errors:0 dropped:0 overruns:0 frame:0
          TX packets:19 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:3602 (3.5 KiB)  TX bytes:1502 (1.4 KiB)
> sudo sysctl net.ipv4.ip_forward          
net.ipv4.ip_forward = 1

В результате контейнер видит хост, хост видит контейнер. А вот доступа к интернету у контейнера нет.

SaBo ★★
() автор топика
Ответ на: комментарий от FireFighter

Да:

root@comsrv:~# ifconfig 
host0     Link encap:Ethernet  HWaddr f2:33:4f:da:4d:3c  
          inet addr:192.168.5.2  Bcast:0.0.0.0  Mask:255.255.255.255
          inet6 addr: fe80::f033:4fff:feda:4d3c/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:19 errors:0 dropped:0 overruns:0 frame:0
          TX packets:146 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:1502 (1.4 KiB)  TX bytes:8768 (8.5 KiB)

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:124 errors:0 dropped:0 overruns:0 frame:0
          TX packets:124 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:13888 (13.5 KiB)  TX bytes:13888 (13.5 KiB)

root@comsrv:~# route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         *               0.0.0.0         U     0      0        0 host0
SaBo ★★
() автор топика
Ответ на: комментарий от FireFighter

Не, не в маске дело:

root@comsrv:~# ifconfig host0
host0     Link encap:Ethernet  HWaddr f2:33:4f:da:4d:3c  
          inet addr:192.168.5.2  Bcast:0.0.0.0  Mask:255.255.255.0
          inet6 addr: fe80::f033:4fff:feda:4d3c/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:28 errors:0 dropped:0 overruns:0 frame:0
          TX packets:170 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:2272 (2.2 KiB)  TX bytes:10168 (9.9 KiB)

Всё равно не пускает...

SaBo ★★
() автор топика
Ответ на: комментарий от SaBo
root@comsrv:~# route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         *               0.0.0.0         U     0      0        0 host0
192.168.5.0     *               255.255.255.0   U     0      0        0 host0
SaBo ★★
() автор топика
Ответ на: комментарий от FireFighter

Я так понимаю, что маскарадинг должен включить IPMasquerade=yes.

Трассировка ничего не говорит:

root@comsrv:~# traceroute 8.8.8.8 
traceroute to 8.8.8.8 (8.8.8.8), 30 hops max, 60 byte packets
 1  192.168.5.2 (192.168.5.2)  2998.872 ms !H  2998.791 ms !H  2998.775 ms !H
SaBo ★★
() автор топика
Ответ на: комментарий от SaBo
iptables -A FORWARD -s 192.168.0.0/24 -j ACCEPT
(этой командой вы разрешили прохождение пакетов между сетевыми интерфейсами
из локальной сети 192.168.0.0/24)

iptables -A FORWARD -d 192.168.0.0/24 -j ACCEPT
(этой командой вы разрешили прохождение пакетов между сетевыми интерфейсами
в локальную сеть 192.168.0.0/24)

iptables -t nat -A POSTROUTING -o eth0 -s 192.168.0.0/24 -j MASQUERADE
(и последняя команда - ей вы включили маскарад для сети 192.168.0.0/24).

я про это

FireFighter ★★★
()
Ответ на: комментарий от FireFighter

Выполнил на хосте:

> sudo iptables -A FORWARD -s 192.168.5.0/24 -j ACCEPT
> sudo iptables -A FORWARD -d 192.168.5.0/24 -j ACCEPT
> sudo iptables -t nat -A POSTROUTING -o eth0 -s 192.168.5.0/24 -j MASQUERADE
> sudo iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     all  --  anywhere             anywhere            
ACCEPT     all  --  192.168.5.0/24       anywhere            
ACCEPT     all  --  anywhere             192.168.5.0/24      

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

Не помогло.

SaBo ★★
() автор топика
Ответ на: комментарий от FireFighter

!!! Заработало !!!

route add default gw 192.168.5.1 host0

Спасибо тебе!!! :)

SaBo ★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.