~ # uname -a
Linux server 2.6.32-26-pve #1 SMP Mon Oct 14 08:22:20 CEST 2013 x86_64 GNU/Linux> как организована сеть для виртуалки?
два интерфейса в виртуалке один 192.168.0.10 на vmbr2 через гейт 192.168.0.1
другой 192.168.1.<какойто> на vmbr1:0 для внутренней сети
вот сеть на хосте
# cat /etc/network/interfaces
auto lo
iface lo inet loopback
# device: eth0
auto eth0
iface eth0 inet static
address ______________
broadcast 148.251.0.127
netmask 255.255.255.224
gateway ______________
# default route to access subnet
up route add -net ________ netmask 255.255.255.224 gw ___________ eth0
iface eth0 inet6 static
address ______________::2
netmask 64
gateway fe80::1
auto vmbr1
iface vmbr1 inet static
address 10.0.0.3
broadcast 10.0.0.255
netmask 255.255.255.0
bridge_ports eth1
bridge_stp off
bridge_fd 0
auto vmbr1:0
iface vmbr1:0 inet static
address 192.168.1.3
broadcast 192.168.0.255
netmask 255.255.255.0
auto vmbr2
iface vmbr2 inet static
address 192.168.0.1
broadcast 192.168.0.255
netmask 255.255.255.0
bridge_ports none
bridge_stp off
bridge_fd 0
post-up /root/firewall.sh
<<EOF
# vmbr1 внутреняя сеть зацеплена на eth1
# vmbr2 сеть 192.168.0.0/24 никуда зацеплена. должна использоваться только для через NAT
вот скрипт который настраивает сеть
cat /root/firewall.sh :
#!/bin/bash
FAILOVERIP=________
EXTERNALIP=`/sbin/ifconfig eth0 | grep 'inet addr:' | cut -d: -f2 | awk '{ print $1}'`
sysctl -w net.netfilter.nf_conntrack_max=196608
echo 1 > /proc/sys/net/ipv4/conf/eth0/proxy_arp
echo 1 > /proc/sys/net/ipv4/ip_forward
echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
iptables -F INPUT
iptables -F FORWARD
iptables -F OUTPUT
iptables -F -t nat
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
iptables -A FORWARD -i vmbr1 -o eth0 -j ACCEPT
iptables -A FORWARD -i eth0 -o vmbr1 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i vmbr2 -o eth0 -j ACCEPT
iptables -A FORWARD -i eth0 -o vmbr2 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -m addrtype --dst-type MULTICAST -j ACCEPT
iptables -A INPUT -m pkttype --pkt-type multicast -j ACCEPT
iptables -A FORWARD -m conntrack --ctstate DNAT -j ACCEPT
#pings
iptables -A INPUT -p icmp --icmp-type 8 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -p icmp --icmp-type 0 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -p icmp --icmp-type 8 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p icmp --icmp-type 0 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -s 192.168.1.1/24 -j ACCEPT
iptables -A INPUT -s 192.168.0.0/24 -j ACCEPT
iptables -A INPUT -s 10.0.0.0/24 -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
#allow internet access for subnet
iptables -t nat -A POSTROUTING -s '192.168.0.0/24' -o eth0 -j MASQUERADE
#port forwarding
iptables -t nat -A PREROUTING -p tcp --dst $EXTERNALIP --dport 80 -j DNAT --to-destination 192.168.0.10:80
iptables -t nat -A PREROUTING -p tcp --dst $EXTERNALIP --dport 8889 -j DNAT --to-destination 192.168.0.10:8889
#allow forward to routing failover ip
route add $FAILOVERIP gw 192.168.0.200
iptables -A FORWARD -i eth0 -p tcp -d $FAILOVERIP -j ACCEPT
iptables -A FORWARD -i eth0 -p icmp -d $FAILOVERIP -j ACCEPT
#open ports
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 8888 -j ACCEPT
iptables -A INPUT -p tcp --dport 5900 -j ACCEPT
<<EOF
причем получается так что не заменяются адреса не только тех пакетов что через NDAT идут , но и тех которые идут через маскарадинг (но их просто на порядки меньше поэтому они могут даже не встретиться , но замечены были) из других виртуалок. В любом случае на общем фоне пакетов таких неправильных сотые доли процента.. но это не дело.
> что будет если 192.168.0.10 попытается обратится на 80 порт на $EXTERNALIP
ничего не будет , он по своей воле туда никогда не обратится, если нужно будет допишем правил.
> если 192.168.0.10 не за eth0, то это правило при пробросе работать не
> будет, обратное преобразование будет в DNAT автоматом
все должно стать понятным из конфигов выше
>> ---
сейчас на другом сервере с таким же конфигом я убрал правило (DNAT на 80 порт остался рабочим но левые пакеты рубятся политикой поумолчанию DROP)
#iptables -A FORWARD -i vmbr2 -o eth0 -j ACCEPT
и разрешил только жизненонеобходимым ходить в сеть
iptables -A FORWARD -s 192.168.0.200 -i vmbr2 -o eth0 -j ACCEPT ( маскарадинг на всякий случай заменил на SNAT --to-source $EXTERNALIP , вот здесь tcpdump и показал очень редкие пакеты с адресом 192.168.0.200 выходящими из eth0, что говорит о том что и DNAT и SNAT имеют одну и туже проблему сейчас)