я хочу создать мост для моей виртуальной машины. И я хочу иметь доступ в Интернет с моего виртуального моста. Что я сделал:
DEVICE=br1
TYPE=Bridge
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.1.1
NETMASK=255.255.255.0
У меня есть мост в моей сети (по dhcp), связанный с eth0:
br0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.110.14 netmask 255.255.255.0 broadcast 192.168.110.255
br0:
DEVICE=br0
TYPE=Bridge
ONBOOT=yes
BOOTPROTO=dhcp
eth0:
TYPE=Ethernet
BOOTPROTO=dhcp
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
NAME=eth0
DEVICE=eth0
ONBOOT=yes
BRIDGE=br0
команда iptables:
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j SNAT --to-source 192.168.110.14
но это не работает.
ping -I br1 8.8.8.8
PING 8.8.8.8 (8.8.8.8) from 192.168.1.1 br1: 56(84) bytes of data.
^C
--- 8.8.8.8 ping statistics ---
61 packets transmitted, 0 received, 100% packet loss, time 59999ms
Что я сделал не так? Пожалуйста помоги.
Мостовое соединение находится на уровне 2, а маршрутизация - на уровне 3, а iptables работает на уровне 3, а не на уровне 2. На уровне 2, где работают мосты, нет концепции маршрутизации. Мосты используют слой-2, например MAC, адреса и кадры доставляются непосредственно на адрес уровня 2 назначения. Мостовое соединение происходит в одной локальной сети. Маршрутизация происходит между локальными сетями и использует уровень 3, например. IP, адреса для отправки пакетов из локальной сети в другую локальную сеть. В локальных сетях кадры инкапсулируют пакеты и используются для отправки кадров непосредственно с одного хоста на другой.
Хост в локальной сети замаскирует адрес пункта назначения уровня 3, чтобы увидеть, находится ли пункт назначения в его локальной сети. Если это так, он создаст фрейм для целевого хоста. В противном случае он создаст фрейм для своего настроенного шлюза (маршрутизатора). На уровне 2 шлюз - это просто еще один хост в локальной сети. Маршрутизацию будет выполнять шлюз, а не мост. Независимо от того, доставляются ли кадры на хост назначения или шлюз находится на хосте-источнике, а не мосту.