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"
Szia, köszönöm, sajnos csak elírás, legutóbb nulláról újra megcsináltam ezt és akkor írtam el. De előtte a 192.168.122.111 volt megadva és úgy sem jó.
Átírtam, reload, és nem jó változatlanul...
Sakk-matt,
KaTT :)
Érdemes lenne kidumpolni szerintem hogy pontosan meddig és hogyan megy a csomag, illetve a válasz meddig jut el, ha van persze :)
---------------------------------------------------
Hell is empty and all the devils are here.
-- Wm. Shakespeare, "The Tempest"
Mit javasolsz, hogy csináljam? Hol olvashatok erről?
Sakk-matt,
KaTT :)
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 :)
Fura.
Írj légyszi egy ifconfig -a kimentet..
---------------------------------------------------
Hell is empty and all the devils are here.
-- Wm. Shakespeare, "The Tempest"
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 :)
Gusztustalan ennek a firewalld-nek a konfigurálása. Szerintem tegyél fel valami rendes tűzfal frontend-et, és csináld azzal.
--
The Community ENTerprise Operating System
Lehet, hogy perverz vagyok, de azt szeretném elsődlegesen használni, amint a CentOS 7 ajánl.
Gondolom akkor az összes RHEL 7 user is ezzel szív, csak van megoldás rá... :)
Szedjem le a firewalld-t és legyen csak iptables vagy más?
Sakk-matt,
KaTT :)
systemctl stop firewalld
systemctl disable firewalld
yum install shorewall
Én így szoktam.
--
The Community ENTerprise Operating System
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
?
Ezt hamarosan kipróbálom, és írok.
Tehát az van még mindig, hogy a virbr0-n belülre már nem érkezik meg a csomag, de az eth0-n bejön.
Sakk-matt,
KaTT :)
Így sem változott.
Sakk-matt,
KaTT :)