Debian Sarge-os gateway, UDP broadcast forwarding

Kezdőlap Fórumok Debiannal kapcsolatos kérdések Debian Sarge-os gateway, UDP broadcast forwarding

2 bejegyzés megtekintése - 1-2 / 2
  • Szerző
    Bejegyzés
  • #2085691
    Gyuszk
    Felhasználó

      Üdv! Mivel nem kaptam választ, válaszolok magamnak.

      A megoldás:
      udp broadcast relay nevü program.

      http://www.joachim-breitner.de/udp-broadcast-relay/

      A válasz a Gentoo Discussion Forums oldalon érkezett.

      #1885338
      csaba
      Felhasználó

        Üdv! A következő a helyzet:
        Van egy Debian Sarge i386 -os szervergépem két db hálókártyával (eth0, eth1).

        eth0 Link encap:Ethernet HWaddr 00:04:E2:EB:8E:56
        inet addr:193.xxx.xxx.31 Bcast:193.xxx.xxx.255 Mask:255.255.255.0
        inet6 addr: fe80::204:e2ff:feeb:8e56/64 Scope:Link
        UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1

        eth1 Link encap:Ethernet HWaddr 00:48:54:6E:B3:EA
        inet addr:192.168.0.1 Bcast:192.168.0.255 Mask:255.255.255.0
        inet6 addr: fe80::248:54ff:fe6e:b3ea/64 Scope:Link
        UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1

        A fenti módon mennek. Az eth0 csatlakozik a kolis LAN-ra (bár tulajdonképpen az internetre, mivel saját fix publikus IP-t kapunk), az eth1 pedig a saját belső LAN-omra. A kettő között iptables-el történő NAT /Masquerading van, + tűzfal.
        A probléma az, hogy a két desktop gépem a belső lLAn-omon lóg, és CS-zni szeretnék egy olyan szerverhez csatlakozva ami a kolis lanon fut.
        A szerverhez tudnék csatlakozni, mert kifelé mindenféle kapcsolatot engedélyeztem, azonban a szervert nem találja meg a játék szerverböngészője ami LAN-os szervereket keres. A LAN-on a CS (illetve a Half Life Dedicated Server) amikor szervert keres, akkor a játékkliens a 255.255.255.255 -re broadcastol UDP csomagokat (source port random, destination port 27015-27020). Ezek a broadcastelések azonban nem jutnak el a másik szobában levő CS szerverhez (ez a kolis lanon van).
        Átmeneti workaround lenne ha a debianos átjárón futtatnánk a CS szervert, de egyelőre túl gyík ahhoz, procicsere kell (most P2, vettünk hozzá P3-at).

        A probléma tehát az lenne, hogy a gépem (192.168.0.2) felől érkező, 255.255.255.255 irányú UDP broadcastolás eljusson az eth1 által elérhető kolis LAN-ra is. Alább csatolom a jelenleg futtatott iptables konfigurációt, amiben kiemelem azt a részt, amelyikkel ezt meg próbálom oldani.

        Lehetséges hogy ezen kivül valamilyen visszaigazolást is kell küldenie a szervernek (amiben a nevét, az ip cimét, az aktuális pályát és játékosok számát és egyéb információt küld el) a kliens felé, ezt még wireshark-al megsniffelem.

        Netfilter konfiguráció:

        # A $SYSCTL valtozo uresbe tetele, igy nem a sysctl programot fogja a kernel beallitasara hasznalni, hanem echo-kkal a /proc-on keresztul
        SYSCTL=””

        # A netfilter rendszer userspace-beli vezerloprogramjainak eleresi utvonalai
        IPT=”/sbin/iptables”
        IPTS=”/sbin/iptables-save”
        IPTR=”/sbin/iptables-restore”

        # Kulso (internet) interfesz
        INET_IFACE=”eth0″

        # Belso (LAN) interfesz
        LOCAL_IFACE=”eth1″
        LOCAL_IP=”192.168.0.1″
        LOCAL_NET=”192.168.0.0/8″
        LOCAL_BCAST=”255.255.255.0″

        # Loopback (127.0.0.1) interfesz
        LO_IFACE=”lo”
        LO_IP=”127.0.0.1″

        if [ „$1” = „save” ]
        then
        echo -n „Tuzfal elmentese: /etc/netfilter/iptables … „
        $IPTS > /etc/netfilter/iptables
        echo „done”
        exit 0
        elif [ „$1” = „restore” ]
        then
        echo -n „Tuzfal visszaallitasa /etc/netfilter/iptables … „
        $IPTR /proc/sys/net/ipv4/ip_forward
        echo „1” > /proc/sys/net/ipv4/conf/all/rp_filter

        echo „Tuzfalszabalyok resetelese …”

        $IPT -P INPUT ACCEPT
        $IPT -P FORWARD ACCEPT
        $IPT -P OUTPUT ACCEPT
        $IPT -t nat -P PREROUTING ACCEPT
        $IPT -t nat -P POSTROUTING ACCEPT
        $IPT -t nat -P OUTPUT ACCEPT
        $IPT -t mangle -P PREROUTING ACCEPT
        $IPT -t mangle -P OUTPUT ACCEPT

        $IPT -F
        $IPT -t nat -F
        $IPT -t mangle -F

        $IPT -X
        $IPT -t nat -X
        $IPT -t mangle -X

        if [ „$1” = „stop” ]
        then
        echo „A tuzfal minden szabalya defaulton, igy jelenleg nincs semmifele tuzfal.”
        exit 0
        fi
        echo „A tuzfal mindenfele ki, be, illetve athalado csomagot eldob. Teljes vedelem.”
        $IPT -P INPUT DROP
        $IPT -P OUTPUT DROP
        $IPT -P FORWARD DROP
        echo „.. sikerult. Ezekutan minden tevekenyseg csak kulon engedellyel lehetseges.”

        echo „Sajat chain-ok letrehozasa …”

        $IPT -N bad_packets
        $IPT -N bad_tcp_packets
        $IPT -N icmp_packets
        $IPT -N udp_inbound
        $IPT -N udp_outbound

        $IPT -N tcp_inbound
        $IPT -N tcp_outbound

        # Egyeni chainok feltoltese
        # bad_packets chain
        # Minden INVALID csomag azonnali eldobasa

        $IPT -A bad_packets -p ALL -m state –state INVALID -j LOG –log-prefix „Hibas csomag:”
        $IPT -A bad_packets -p ALL -m state –state INVALID -j DROP

        # A TCP csomagok tovabbi ellenorzese
        $IPT -A bad_packets -p tcp -j bad_tcp_packets

        # Minden oke, tehat visszateres
        $IPT -A bad_packets -p ALL -j RETURN

        # bad_tcp_packets chain
        #
        # Minden TCP csomag at fog kelni ezen a chainon.
        # Minden uj kapcsolat elvileg egy syn csomaggal kezdodik.
        # Ha megsem, akkor valami mas lesz, peldaul port scanneles.
        # Minden ilyen NEW csomagot eldobunk, ami nem syn.

        # Visszarakas az eredeti chainba, akkor ha a rossz csomag
        # egy belso interfeszrol erkezett. Ez akkor biztonsagos, ha
        # a tuzfal egy jol megbizhato belso halozatot ved.

        $IPT -A bad_tcp_packets -p tcp -i $LOCAL_IFACE -j RETURN

        $IPT -A bad_tcp_packets -p tcp ! –syn -m state –state NEW -j LOG –log-prefix „Uj kapcsolat, nem syn:”
        $IPT -A bad_tcp_packets -p tcp ! –syn -m state –state NEW -j DROP

        # Minden oke, visszateres:
        $IPT -A bad_tcp_packets -p tcp -j RETURN

        # icmp_packets chain

        # A kovetkezo sort enabledre kell tenni, ha pingelheto hostot akarunk:
        $IPT -A icmp_packets -p ICMP -s 0/0 –icmp-type 8 -j ACCEPT

        # Time Exceeded
        $IPT -A icmp_packets -p ICMP -s 0/0 –icmp-type 11 -j ACCEPT

        # Not matched, so return so it will be logged
        $IPT -A icmp_packets -p ICMP -j RETURN

        # udp_inbound chain
        #
        # Ez a chain tartalmazza a bejovo UDP csomagokat.
        # Ez az internet/kifele nezo interfesz INPUT -jara vonatkozik.
        # A NetBIOS (Windows) csomagokat kerdezes nelkul droppolja.

        $IPT -A udp_inbound -p UDP -s 0/0 –destination-port 3997 -j ACCEPT
        $IPT -A udp_inbound -p UDP -s 0/0 –destination-port 3998 -j ACCEPT
        $IPT -A udp_inbound -p UDP -s 0/0 –destination-port 27005 -j ACCEPT
        $IPT -A udp_inbound -p UDP -s 0/0 –destination-port 27007 -j ACCEPT
        $IPT -A udp_inbound -p UDP -s 0/0 –destination-port 27015 -j ACCEPT
        $IPT -A udp_inbound -p UDP -s 0/0 –destination-port 27025 -j ACCEPT

        $IPT -A udp_inbound -p UDP -s 0/0 –destination-port 137 -j DROP
        $IPT -A udp_inbound -p UDP -s 0/0 –destination-port 138 -j DROP

        # Network Time Protocol (NTP) Server
        $IPT -A udp_inbound -p UDP -s 0/0 –destination-port 123 -j ACCEPT

        # DNS Server
        # Configure the server to use port 53 as the source port for requests
        # Note, if you run a caching-only name server that only accepts queries
        # from the private network or localhost, you can comment out this line.
        $IPT -A udp_inbound -p UDP -s 0/0 –destination-port 53 -j ACCEPT

        # $IPT -A udp_inbound -p UDP -s 0/0 –source-port 53 -j ACCEPT

        # Dynamic Address
        # If DHCP, the initial request is a broadcast. The response
        # doesn’t exactly match the outbound packet. This explicitly
        # allow the DHCP ports to alleviate this problem.
        # If you receive your dynamic address by a different means, you
        # can probably comment this line.
        $IPT -A udp_inbound -p UDP -s 0/0 –source-port 67 –destination-port 68 -j ACCEPT

        $IPT -A udp_inbound -p UDP -j RETURN

        # udp_outbound chain
        #
        # This chain is used with a private network to prevent forwarding for
        # UDP requests on specific protocols. Applied to the FORWARD rule from
        # the internal network. Ends with an ACCEPT

        # Nincs talalat, tehat elfogadva (ACCEPT)
        $IPT -A udp_outbound -p UDP -s 0/0 -j ACCEPT

        # tcp_inbound chain
        #
        # Ez a bejovo, kulso internet felol erkezo
        # TCP csomagok helye. Alapban minden tiltva, a lenti
        # szolgaltatasok kivetelevel.

        # HTTP
        $IPT -A tcp_inbound -p TCP -s 0/0 –destination-port 80 -j ACCEPT

        # HTTPS (Secure Web Server)
        $IPT -A tcp_inbound -p TCP -s 0/0 –destination-port 443 -j ACCEPT

        # FTP Server (Control)
        $IPT -A tcp_inbound -p TCP -s 0/0 –destination-port 21 -j ACCEPT

        # FTP Client (Data Port for non-PASV transfers)
        $IPT -A tcp_inbound -p TCP -s 0/0 –source-port 20 -j ACCEPT

        # Email Server (SMTP)
        $IPT -A tcp_inbound -p TCP -s 0/0 –destination-port 25 -j ACCEPT

        # Email Server (POP3)
        $IPT -A tcp_inbound -p TCP -s 0/0 –destination-port 110 -j ACCEPT

        # sshd
        $IPT -A tcp_inbound -p TCP -s 0/0 –destination-port 22 -j ACCEPT

        # Not matched, so return so it will be logged
        $IPT -A tcp_inbound -p TCP -j RETURN

        # tcp_outbound chain

        # No match, so ACCEPT
        $IPT -A tcp_outbound -p TCP -s 0/0 -j ACCEPT

        echo „Process INPUT chain …”

        # Minden engedelyezese kintrol
        $IPT -A INPUT -p ALL -i $LO_IFACE -j ACCEPT

        # Hibas csomagok eldobalasa
        $IPT -A INPUT -p ALL -j bad_packets

        # Rules for the private network (accessing gateway system itself)
        $IPT -A INPUT -p ALL -i $LOCAL_IFACE -s $LOCAL_NET -j ACCEPT
        $IPT -A INPUT -p ALL -i $LOCAL_IFACE -d $LOCAL_BCAST -j ACCEPT

        # Internet felol bejovo szabalyok

        # Bejovo kapcsolatok elfogadasa
        $IPT -A INPUT -p ALL -i $INET_IFACE -m state –state ESTABLISHED,RELATED -j ACCEPT

        # Route the rest to the appropriate user chain
        $IPT -A INPUT -p TCP -i $INET_IFACE -j tcp_inbound
        $IPT -A INPUT -p UDP -i $INET_IFACE -j udp_inbound
        $IPT -A INPUT -p ICMP -i $INET_IFACE -j icmp_packets

        # Drop without logging broadcasts that get this far.
        # Cuts down on log clutter.
        # Comment this line if testing new rules that impact
        # broadcast protocols.
        $IPT -A INPUT -p ALL -d 255.255.255.255 -j DROP

        # Log packets that still don’t match
        $IPT -A INPUT -m limit –limit 3/minute –limit-burst 3 -j LOG –log-prefix „INPUT packet died: „

        echo „Process FORWARD chain …”

        # Used if forwarding for a private network

        # Drop bad packets$IPT -A FORWARD -p ALL -j bad_packets

        # Accept TCP packets we want to forward from internal sources
        $IPT -A FORWARD -p tcp -i $LOCAL_IFACE -j tcp_outbound

        # Accept UDP packets we want to forward from internal sources
        $IPT -A FORWARD -p udp -i $LOCAL_IFACE -j udp_outbound

        # If not blocked, accept any other packets from the internal interface
        $IPT -A FORWARD -p ALL -i $LOCAL_IFACE -j ACCEPT

        # Deal with responses from the internet
        $IPT -A FORWARD -i $INET_IFACE -m state –state ESTABLISHED,RELATED -j ACCEPT

        # Log packets that still don’t match
        $IPT -A FORWARD -m limit –limit 3/minute –limit-burst 3 -j LOG –log-prefix „FORWARD packet died: „

        echo „Process OUTPUT chain …”

        # A kifele valo kapcsolodas engedelyezese

        # Azonban a hibas kimeno ICMP csomagokat el kell dobni!
        $IPT -A OUTPUT -m state -p icmp –state INVALID -j DROP

        # Local host
        $IPT -A OUTPUT -p ALL -s $LO_IP -j ACCEPT
        $IPT -A OUTPUT -p ALL -o $LO_IFACE -j ACCEPT

        # A belso halozat fele
        $IPT -A OUTPUT -p ALL -s $LOCAL_IP -j ACCEPT
        $IPT -A OUTPUT -p ALL -o $LOCAL_IFACE -j ACCEPT

        # Az internet fele
        $IPT -A OUTPUT -p ALL -o $INET_IFACE -j ACCEPT

        # Azon csomagok naplozasa amik meg mindig nem feleltek meg:
        $IPT -A OUTPUT -m limit –limit 3/minute –limit-burst 3 -j LOG –log-prefix „OUTPUT csomag meghalt: „

        echo „Szabalyok betoltese a NAT tablazatbol …”

        $IPT -t nat -A POSTROUTING -o $INET_IFACE -j MASQUERADE

        # !!!!!!!!!!
        # Probalkozas az UDP csomagok broadcastjere
        # !!!!!!!!!!

        EXTIP=”193.225.227.255″ // ez a ketto nem konkret ip cim hanem broadcast
        PORTFWIP=”192.168.0.255″

        $IPT -A FORWARD -i eth1 -o eth0 -p udp –dport 27015 -j ACCEPT
        $IPT -A PREROUTING -t nat -p udp -d $EXTIP –dport 27015 -j DNAT –to $PORTFWIP:27015

        $IPT -A FORWARD -i eth1 -o eth0 -p udp –dport 27016 -j ACCEPT
        $IPT -A PREROUTING -t nat -p udp -d $EXTIP –dport 27016 -j DNAT –to $PORTFWIP:27016

        $IPT -A FORWARD -i eth1 -o eth0 -p udp –dport 27017 -j ACCEPT
        $IPT -A PREROUTING -t nat -p udp -d $EXTIP –dport 27017 -j DNAT –to $PORTFWIP:27017

        $IPT -A FORWARD -i eth1 -o eth0 -p udp –dport 27018 -j ACCEPT
        $IPT -A PREROUTING -t nat -p udp -d $EXTIP –dport 27018 -j DNAT –to $PORTFWIP:27018

        $IPT -A FORWARD -i eth1 -o eth0 -p udp –dport 27019 -j ACCEPT
        $IPT -A PREROUTING -t nat -p udp -d $EXTIP –dport 27019 -j DNAT –to $PORTFWIP:27019

        $IPT -A FORWARD -i eth1 -o eth0 -p udp –dport 27020 -j ACCEPT
        $IPT -A PREROUTING -t nat -p udp -d $EXTIP –dport 27020 -j DNAT –to $PORTFWIP:27020

        $IPT -A FORWARD -i eth1 -o eth0 -p udp –dport 3997 -j ACCEPT
        $IPT -A PREROUTING -t nat -p udp -d $EXTIP –dport 3997 -j DNAT –to $PORTFWIP:3997

        $IPT -A FORWARD -i eth1 -o eth0 -p udp –dport 3998 -j ACCEPT
        $IPT -A PREROUTING -t nat -p udp -d $EXTIP –dport 3998 -j DNAT –to $PORTFWIP:3998

        $IPT -A FORWARD -i eth1 -o eth0 -p udp –dport 27005 -j ACCEPT
        $IPT -A PREROUTING -t nat -p udp -d $EXTIP –dport 27005 -j DNAT –to $PORTFWIP:27005

        $IPT -A FORWARD -i eth1 -o eth0 -p udp –dport 27007 -j ACCEPT
        $IPT -A PREROUTING -t nat -p udp -d $EXTIP –dport 27007 -j DNAT –to $PORTFWIP:27007

        $IPT -A FORWARD -i eth1 -o eth0 -p udp –dport 27025 -j ACCEPT
        $IPT -A PREROUTING -t nat -p udp -d $EXTIP –dport 27025 -j DNAT –to $PORTFWIP:27025

        A válaszokat előre is köszönöm!

      2 bejegyzés megtekintése - 1-2 / 2
      • Be kell jelentkezni a hozzászóláshoz.