Problem : Ich habe Docker und QEMU auf einem Rechner laufen. Nach der Docker Installation war es der virtuellen Maschine in QEMU nicht mehr möglich ins Internet zu zugreifen.
Lösung :
In meinem Fall waren die Default Einstellungen der Docker-CE Installation Schuld. Durch das korrigieren der IP-Tables konnte ich das Problem in meinem Fall beheben.
iptables -A FORWARD -i br1 -o br1 -j ACCEPT
Der Fehler tritt auch manchmal auf wenn der Linux Server in QEMU installiert ist und die lokale Firewall Einstellung das forwarding nicht zulässt.
Ich hab hier eine Anwendung die
WebSocket verwendet und im HA Umfeld läuft (haproxy). Leider benötigt diese Anwendung auch Sessions (
sticky) deswegen musste ich ein wenig basteln
Bei mir läuft eine
node.js Anwendung hinter dem haproxy , für andere Fälle muss man vermutlich noch etwas mit der Konfiguration spielen.
Erstmal habe ich in der vhost des Apaches dafür gesorgt das ws auf den richtigen Server geleitet wird.
vhost
RewriteEngine On
RewriteCond %{HTTP:Connection} Upgrade [NC]
RewriteCond %{HTTP:Upgrade} websocket [NC]
RewriteRule /demoapp/(.*) ws://demo-srv-01:3030/$1 [P,L]
RedirectMatch ^/demoapp$ TARGET-URL/demoapp/
ProxyPass /demoapp/ http://demo-srv-01:3030/
ProxyPassReverse /demoapp/ http://demo-srv-01:3030/
Dann hab ich die haproxy Konfiguration auf die Anwendung zugeschnitten.
haproxy
listen demoapp:3030
bind *:3030
# EIO ist immer gesetzt wenn über Websocket
acl IsStatus urlp(EIO) 3
use_backend ws_demoapp if IsStatus
use_backend default if !IsStatus
backend ws_demoapp
mode http
# eventuell gesetzte Header löschen
rspdel ^Server:.*
rspdel ^X-Powered-By:.*
# und durch Server demoapp Header ersetzen
rspadd Server:\ demoapp
# diese Seite muss HTTP-Status 200 liefern damit der HA erkennt das alles ok ist
option httpchk HEAD /lbhealth
# check auf Status wenn der 200 ist ist alles ok
http-check expect status 200
# using the `io` cookie set upon handshake
cookie io prefix indirect nocache
# Server Endpunkte
server wsdemoapp01 ws-demo-srv-01:8200 check cookie monitor01
server wsdemoapp02 ws-demo-srv-02:8200 check cookie monitor02
backend default
mode http
# eventuell gesetzte Header löschen
rspdel ^Server:.*
rspdel ^X-Powered-By:.*
# und durch Server demoapp Header ersetzen
rspadd Server:\ demoapp
# Server Endpunkte wird normal gebalancet
balance leastconn
server node01 ws-demo-srv-01:80 check cookie node01
server node02 ws-demo-srv-02:80 check cookie node02
Quellen & Info :
https://de.wikipedia.org/wiki/WebSocket
https://load-balancer.info/themen/sticky-session-load-balancing/
https://nodejs.org/en/about/
https://www.haproxy.org/#desc
https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API