virbr0 - eth0 ip:port forward firewalld esetén httpd miatt

Fórumok

Sziasztok!

Adott egy CentOS 7.
Hálózati kártyák: eth0 = switch+internet, eth1=direkt kábel kapcsolat, de ez itt nem fontos.
Firewalld használat. Libvirt által felhúzott virbr0 interface, amin csüngnek a konténerek a 192.168.122.1/24-es tartományban, például 192.168.122.111 a httpd a 80-as porton.
A konténerek látják egymást, és a host gépről is elérem az összes konténert a 192.168.122.-es tartományon belül.
Azt szeretném, hogy az eth0 irányából (bármilyen IP-n) a 80-as porton a 192.168.122.111 ip 80-as portjára kapcsolódva kommunikáljon, használható legyen a httpd (apache).

192.168.122.111 ip 80-as portján bejön a httpd, ha a host gépről próbálom.
Azonban az eth0-án keresztül a 80-as porton nem jön be semmi, pedig ezt állítottam be:

firewall-cmd --zone=public --add-forward-port=port=80:proto=tcp:toport=80:toaddr=192.168.122.111 –permanent

majd

firewall-cmd –reload

Beállítások:
/etc/sysctl.conf
net.ipv4.ip_forward=1

Valamint a public zónában be van kapcsolva a masquerade.

Zónák infója, a lényeg:

firewall-cmd --list-all-zones

public (default, active)
interfaces: eth0 virbr0
sources:
services: ssh
ports: 443/tcp 80/tcp
masquerade: yes
forward-ports: port=80:proto=tcp:toport=80:toaddr=192.168.122.111

internal (active)
interfaces: eth1
sources:
services: ipp-client mdns samba-client ssh
ports:
masquerade: yes
forward-ports:
icmp-blocks:
rich rules:

Mi lehet a gond?
Miért nem tud átjutni a virbr0-ra az eth0-ról a port forward?
Olyan beállítás kellene, hogy az eth0-ra bárhogy kapcsolódva a 80-as portra TCP-n átmenjen a virbr0 interfészen lévő 192.168.122.111 ip 80-as portjára.

Próbáltam ilyet is, de nem láttam változást:

firewall-cmd --permanent --zone=public --add-rich-rule="rule family="ipv4" source address="192.168.122.111/24" service name="http" accept"

firewall-cmd --permanent --zone=public --add-rich-rule="rule family="ipv4" source address="192.168.122.111/24" port protocol="tcp" port="80" accept"

Ez kell, ha a httpd portját továbbítom? Https esetén? Ha mondjuk az openvpn-t továbbítom, akkor is kell?

Köszönöm.

UPDATE1: elírást javítottam, sajnos változatlan a helyzet

Hozzászólások

szerintem csak elírtad :) : firewall-cmd --zone=public --add-forward-port=port=80:proto=tcp:toport=80:toaddr=192.1.122.111 –permanent

nem véletlen ennek kéne lennie? : firewall-cmd --zone=public --add-forward-port=port=80:proto=tcp:toport=80:toaddr=192.168.122.111 –permanent

---------------------------------------------------
Hell is empty and all the devils are here.
-- Wm. Shakespeare, "The Tempest"

tcpdump + esetleg wireshark ami kellene neked ehhez, ez alapján http://danielmiessler.com/study/tcpdump/ el tudsz indulni szerintem.
Érdemes dumpolni a hoston egyrészt, illetve a virtuális gépben is érdekes lehet egyet nézni, hogy beérnek-e oda egyáltalán a csomagok...

---------------------------------------------------
Hell is empty and all the devils are here.
-- Wm. Shakespeare, "The Tempest"

A host gépre ez jön be:

tcpdump -nnvvS -i eth0 port 80
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
14:14:23.048442 IP (tos 0x0, ttl 128, id 17772, offset 0, flags [DF], proto TCP (6), length 52)
192.168.1.101.2812 > 192.168.1.33.80: Flags [S], cksum 0x7504 (correct), seq 518867653, win 65535, options [mss 1460,nop,wscale 0,nop,nop,sackOK], length 0
14:14:23.300545 IP (tos 0x0, ttl 128, id 17781, offset 0, flags [DF], proto TCP (6), length 52)
192.168.1.101.2813 > 192.168.1.33.80: Flags [S], cksum 0x4ba4 (correct), seq 2994462869, win 65535, options [mss 1460,nop,wscale 0,nop,nop,sackOK], length 0
14:14:26.003827 IP (tos 0x0, ttl 128, id 17787, offset 0, flags [DF], proto TCP (6), length 52)
192.168.1.101.2812 > 192.168.1.33.80: Flags [S], cksum 0x7504 (correct), seq 518867653, win 65535, options [mss 1460,nop,wscale 0,nop,nop,sackOK], length 0
14:14:26.303294 IP (tos 0x0, ttl 128, id 17792, offset 0, flags [DF], proto TCP (6), length 52)
192.168.1.101.2813 > 192.168.1.33.80: Flags [S], cksum 0x4ba4 (correct), seq 2994462869, win 65535, options [mss 1460,nop,wscale 0,nop,nop,sackOK], length 0

A guest gépen ahol fut a webszerver, oda NEM érkeznek be a csomagok.
tcpdump -nnvvS -i eth0 port 80

Azonban, ha megnézem a host-ról az adott IP 80-as portján egy böngészővel, hogy mi van, tökéletesen működik:

tcpdump -nnvvS -i eth0 port 80
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
13:12:34.051703 IP (tos 0x0, ttl 64, id 1762, offset 0, flags [DF], proto TCP (6), length 60)
192.168.122.1.40970 > 192.168.122.111.80: Flags [S], cksum 0x75aa (incorrect -> 0x5406), seq 763182251, win 14600, options [mss 1460,sackOK,TS val 11156041 ecr 0,nop,wscale 7], length 0
13:12:34.051727 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto TCP (6), length 60)
192.168.122.111.80 > 192.168.122.1.40970: Flags [S.], cksum 0x75aa (incorrect -> 0xf23c), seq 769718620, ack 763182252, win 14480, options [mss 1460,sackOK,TS val 11156041 ecr 11156041,nop,wscale 7], length 0
13:12:34.051747 IP (tos 0x0, ttl 64, id 1763, offset 0, flags [DF], proto TCP (6), length 52)
192.168.122.1.40970 > 192.168.122.111.80: Flags [.], cksum 0x75a2 (incorrect -> 0x5926), seq 763182252, ack 769718621, win 115, options [nop,nop,TS val 11156041 ecr 11156041], length 0

Tehát nem működik a forward a host és az adott IP között.

firewall-cmd --zone=public --list-all
public (default, active)
interfaces: eth0 eth1 virbr0
sources:
services: ssh
ports: 443/tcp 80/tcp
masquerade: yes
forward-ports: port=80:proto=tcp:toport=80:toaddr=192.168.122.111
icmp-blocks:
rich rules:
rule family="ipv4" source address="192.168.122.111" service name="http" accept
rule family="ipv4" source address="192.168.122.111" port port="80" protocol="tcp" accept

De ha kiveszem a rich rules blokkokat, akkor sem működik.

Mit nézzek meg, hogy miért nem juthat el a csomag a cél 111-es IP-re?
Miért nem működhet a firewalld?

Sakk-matt,
KaTT :)

a hoston így próbáld megnézni: tcpdump -i virbr0 port 80 , mert ugye arra a lábra kellene mennie szerintem...
Én ezek alapján valami nat gondra saccolnék, de a firewalld-t sajnos nem ismerem igazán...

ui: brctl show-t adj ki lécci és másold be ide.
---------------------------------------------------
Hell is empty and all the devils are here.
-- Wm. Shakespeare, "The Tempest"

]# tcpdump -i virbr0 port 80
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on virbr0, link-type EN10MB (Ethernet), capture size 65535 bytes

De nem jön rá adat, ha csatlakozok a host 80-as portjára.
Tehát nem jut át a forward beállítás ellenére a csomag a host eth0 80-as portjáról a virbr0 111-es IP címére.

# brctl show
bridge name bridge id STP enabled interfaces
virbr0 8000.2e50cec07d92 yes vnet0
vnet1
vnet2
vnet3
vnet4

Sakk-matt,
KaTT :)

ifconfig -a

enp2s0f0: flags=4163 mtu 1500
inet 192.168.1.101 netmask 255.255.255.0 broadcast 192.168.1.255
inet6 fe80::1aa9:5ff:fe77:b5f8 prefixlen 64 scopeid 0x20

ether 18:a9:05:77:b5:f8 txqueuelen 1000 (Ethernet)
RX packets 144887 bytes 11060606 (10.5 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 151801 bytes 86739143 (82.7 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

enp2s0f1: flags=4163 mtu 1500
inet 172.21.1.1 netmask 255.240.0.0 broadcast 172.31.255.255
inet6 fe80::1aa9:5ff:fe77:b5fa prefixlen 64 scopeid 0x20

ether 18:a9:05:77:b5:fa txqueuelen 1000 (Ethernet)
RX packets 17 bytes 3239 (3.1 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 27 bytes 4103 (4.0 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

lo: flags=73 mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10
loop txqueuelen 0 (Local Loopback)
RX packets 4 bytes 420 (420.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 4 bytes 420 (420.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

Sakk-matt,
KaTT :)

Megnézem, ki fogom próbálni, köszönöm.

Nem lehetséges, hogy az a baj, hogy amikor a firewalld fut, utána indítom el a libvirt-et, ami felhúzza a virbr0-t? Hiába csinálok firewalld restart-ot, nem forwardolja a dolgokat tovább.
Nem lehet, hogy mást is újra kellene indítani hozzá, ha megjelent a virbr0?

Sakk-matt,
KaTT :)

echo "0" > /proc/sys/net/bridge/bridge-nf-call-iptables
?