Здравствуйте. Имею проблему с nat - правило есть, преобразования не происходит. Свежеустановленный debian wheezy. ~# uname -a Linux klon-hn0 3.2.0-4-amd64 #1 SMP Debian 3.2.41-2+deb7u2 x86_64 GNU/Linux ~# iptables --version iptables v1.4.14
Есть железная машина [HN], на которой запускаются виртуалки.
~# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq master br1
state UP qlen 1000
link/ether 88:51:fb:28:fa:2c brd ff:ff:ff:ff:ff:ff
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP
qlen 1000
link/ether 88:51:fb:28:fa:2d brd ff:ff:ff:ff:ff:ff
inet 172.16.2.44/24 brd 172.16.2.255 scope global eth1
inet6 2001:67c:2158:a039:8a51:fbff:fe28:fa2d/64 scope global dynamic
valid_lft 86248sec preferred_lft 14248sec
inet6 fe80::8a51:fbff:fe28:fa2d/64 scope link
valid_lft forever preferred_lft forever
4: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP
link/ether fe:54:00:00:d2:81 brd ff:ff:ff:ff:ff:ff
inet 172.17.0.1/28 brd 172.17.0.15 scope global br0
inet6 fe80::6c53:b6ff:fef6:a74c/64 scope link
valid_lft forever preferred_lft forever
5: br1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP
link/ether 88:51:fb:28:fa:2c brd ff:ff:ff:ff:ff:ff
inet 172.17.0.17/28 brd 172.17.0.31 scope global br1
inet6 fe80::8a51:fbff:fe28:fa2c/64 scope link
valid_lft forever preferred_lft forever
6: vnet0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast
master br0 state UNKNOWN qlen 500
link/ether fe:54:00:00:d2:81 brd ff:ff:ff:ff:ff:ff
inet6 fe80::fc54:ff:fe00:d281/64 scope link
valid_lft forever preferred_lft forever
7: vnet1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast
master br1 state UNKNOWN qlen 500
link/ether fe:54:00:12:84:dc brd ff:ff:ff:ff:ff:ff
inet6 fe80::fc54:ff:fe12:84dc/64 scope link
valid_lft forever preferred_lft forever
Вот так выглядят бриджи:
~# brctl show
bridge name bridge id STP enabled interfaces
br0 8000.fe540000d281 no vnet0
br1 8000.8851fb28fa2c no eth0
vnet1
Таблица маршрутизации:
~# ip r
default via 172.16.2.1 dev eth1
172.16.2.0/24 dev eth1 proto kernel scope link src 172.16.2.44
172.17.0.0/28 dev br0 proto kernel scope link src 172.17.0.1
172.17.0.16/28 dev br1 proto kernel scope link src 172.17.0.17
172.17.1.0/24 via 172.17.0.2 dev br0
Собсно правило NAT:
~# iptables-save -t nat
# Generated by iptables-save v1.4.14 on Tue May 28 20:42:38 2013
*nat
:PREROUTING ACCEPT [1066:99540]
:INPUT ACCEPT [5:339]
:OUTPUT ACCEPT [1:80]
:POSTROUTING ACCEPT [864:77910]
-A POSTROUTING ! -d 172.16.2.44/32 -o eth1 -j SNAT --to-source 172.16.2.44
COMMIT
# Completed on Tue May 28 20:42:38 2013
Т.е. схематично сеть выглядит так:
[(eth1:172.16.2.44)-HN-(br0:172.17.0.1)]~~~[(eth0:172.17.0.2)-GW-(eth1:172.17.1.1)]===[(eth0:172.17.1.2)-USER]
Трафик с GW, проходящий через HN - натится
а вот трафик от USER (обычная машина, включённая в eth0 на HN) - не натится
т.е. tcpdump -pni eth1 на HN показывает трафик с IP-адресом от USER,
хотя должен был понатить
GW является kvm-вируалкой, которая физически живёт на машине HN
её eth0 сбриждован с br0, который в реальные eth не смотрит
eth1 от GW сбриджован с br1, который физически уходит на eth0 HN
Пересечений по интерфейсам (физическим и логическим) я не наблюдаю
Вот адреса на GW:
~# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast
state UP qlen 1000
link/ether 52:54:00:00:d2:81 brd ff:ff:ff:ff:ff:ff
inet 172.17.0.2/28 brd 172.17.0.15 scope global eth0
inet6 fe80::5054:ff:fe00:d281/64 scope link
valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast
state UP qlen 1000
link/ether 52:54:00:12:84:dc brd ff:ff:ff:ff:ff:ff
inet 172.17.1.1/24 brd 172.17.1.255 scope global eth1
inet 192.168.15.205/24 scope global eth1
inet6 fe80::5054:ff:fe12:84dc/64 scope link
valid_lft forever preferred_lft forever
Трафик самой GW уходящий в интернет через HN нормально натится.
Трафик из сети 172.17.1.0/24 (которая напрямую HN не видит) до
172.17.0.1 (адрес HN) ходит, но дальше - не натится.
Имею довольно большое количество установок где натить надо и сети,
доступные напрямую, и сети, которые так же зароучены через другие машины
- и там всё работает.
Физически на машине HN на eth0 висит локалка и iLO от самой машины.
Если на eth0 (т.е. на br1) повесить IP из 172.17.1.0/24 и iLO поставить
адрес из той же сети, то трафик не пойдёт через машину GW.
На GW планируется поставить прозрачную проксю для офиса и возможно
трафикосчиталку. На железную машину, которая занимается запуском
виртуалок, проксю ставить не хочу. Ставить непонятную трафикосчиталку -
желания ещё меньше.
Я понимаю что правильно было бы завернуть iLO в отдельный vlan, натилку
вынести на пограничную железку, но бюджет сильно ограничен.
Есть идеи что это и почему оно работает не так, как предполагается?
Заранее спасибо.
--
Best regards,
Mikhail
-
WWW: http://www.antmix.ru/
XMPP: [email protected]
signature.asc
Description: OpenPGP digital signature

