• Liebe User, bitte beachtet folgendes Thema: Was im Forum passiert, bleibt im Forum! Danke!
  • Hallo Gemeinde! Das Problem leidet zurzeit unter technischen Problemen. Wir sind da dran, aber das Zeitkontingent ist begrenzt. In der Zwischenzeit dürfte den meisten aufgefallen sein, dass das Erstellen von Posts funktioniert, auch wenn das Forum erstmal eine Fehlermeldung wirft. Um unseren Löschaufwand zu minimieren, bitten wir euch darum, nicht mehrmals auf 'Post Reply' zu klicken, da das zur Mehrfachposts führt. Grußworte.

broodwar & router

freeka

Guest
moin

ja ich weiss dass das thema schon oft diskutiert wurde und es eigene threads dafuer gibt, allerdings hilft mir das nicht weiter

also ich hab nen selbstgebastelten gnu/linux router, 2.4.x kernel.

jeden port schalte ich mit der selben folge von iptables befehlen frei, was ueberall bisher auch geklappt hat, aber broodwar bewege ich nicht zum laufen

ich habe fuer bw 6112-6119 tcp und udp freigegeben, sowie den port 4000 weil mal irgendwo stand das koennte auch helfen...

naja ich kann allerdings keine spiele erstellen. broodwar laeuft auf nem win98 rechner der halt normal im netzwerk mit dem router/nat haengt...

muss man noch irgendwas beachten? hab ich was uebersehen?
 

palandir

Guest
Nicht nur freigeben, sondern forwarden. Das ist ein Unterschied, ob du den Port am Router oeffnest, oder die eingehenden Pakete weiterleitest (das ist das was du willst).
iptables-Befehle koennte z.B. so aussehen:

Code:
${IPTABLES} -t nat -A PREROUTING -p tcp -i ${EXTERNAL_INTERFACE} -d ${EXTERNAL_IP} --dport 6112 -j DNAT --to ${CLIENT_IP}:6112
${IPTABLES} -A FORWARD -p tcp -i ${EXTERNAL_INTERFACE} -d ${CLIENT_IP} --dport 6112 -j ACCEPT
${IPTABLES} -t nat -A PREROUTING -p udp -i ${EXTERNAL_INTERFACE} -d ${EXTERNAL_IP} --dport 6112 -j DNAT --to ${CLIENT_IP}:6112
${IPTABLES} -A FORWARD -p udp -i ${EXTERNAL_INTERFACE} -d ${CLIENT_IP} --dport 6112 -j ACCEPT

$IPTABLES = Pfad zu iptables
$EXTERNAL_INTERFACE = das Netzwerkinterface nach aussen hin
$EXTERNAL_IP = IP-Adresse des Routers nach aussen hin
$CLIENT_IP = IP-Adresse deines Client-Rechners der das Game hosten will

Das ist aus meinem selbst gebastelten Firewall-(bash-)Script, wahrscheinlich nicht optimal aber funktioniert (nur fuer Port 6112 UDP/TCP, mehr brauche ich nicht da sonst ausser ${CLIENT_IP} kein Rechner mehr im LAN ist der noch ein Spiel hosten sollte).
Wenn du mehr Ports fowarden willst (z.B. 6112 bis 6119) koenntest du das in einer Schleife machen, ala:

Code:
for port in `seq 6112 6119`; do
    ${IPTABLES} -t nat -A PREROUTING -p tcp -i ${EXTERNAL_INTERFACE} -d ${EXTERNAL_IP} --dport ${port} -j DNAT --to ${CLIENT_IP}:${port}
    ${IPTABLES} -A FORWARD -p tcp -i ${EXTERNAL_INTERFACE} -d ${CLIENT_IP} --dport ${port} -j ACCEPT
    ${IPTABLES} -t nat -A PREROUTING -p udp -i ${EXTERNAL_INTERFACE} -d ${EXTERNAL_IP} --dport ${port} -j DNAT --to ${CLIENT_IP}:${port}
    ${IPTABLES} -A FORWARD -p udp -i ${EXTERNAL_INTERFACE} -d ${CLIENT_IP} --dport ${port} -j ACCEPT
done

Ansonsten solltest du keine Personal Firewall auf deinem Win98-Client laufen haben, die koennte dir naemlich dazwischenfunken indem sie die geforwardeten Pakete droppt (und abgesehen davon bringen PFWs sowieso mehr Unheil als Gutes).

Port 4000 hab ich nicht freigegeben und es geht trotzdem reibungslos, also ist der nicht noetig (hab ich auch noch nie gelesen von).
 

cart

Technik/Software Forum
Mitglied seit
01.08.2002
Beiträge
4.873
Reaktionen
0
Ort
New York
Ich kann mich daran erinnern, hier mal ein komplettes IPTables Script gepostet zu haben, in dem BW auch schon drin war. Die Suchfunktion hätte dir das bestimmt ausgespuckt...
 

freeka

Guest
@0xdeadbeef
danke, aber naja so hab ich das aber schon

hip=192.168.0.209
iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 6112:6119 -j DNAT --to-destination $hip
iptables -t nat -A POSTROUTING -o eth0 -p tcp --dport 6112:6119 -j SNAT --to-source $LAN_IP
iptables -A FORWARD -i ppp0 -m state --state NEW -p tcp -d $hip --dport 6112:6119 -j ACCEPT

iptables -t nat -A PREROUTING -i ppp0 -p udp --dport 6112:6119 -j DNAT --to-destination $hip
iptables -t nat -A POSTROUTING -o eth0 -p udp --dport 6112:6119 -j SNAT --to-source $LAN_IP
iptables -A FORWARD -i ppp0 -m state --state NEW -p udp -d $hip --dport 6112:6119 -j ACCEPT

iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 4000 -j DNAT --to-destination $hip
iptables -t nat -A POSTROUTING -o eth0 -p tcp --dport 4000 -j SNAT --to-source $LAN_IP
iptables -A FORWARD -i ppp0 -m state --state NEW -p tcp -d $hip --dport 4000 -j ACCEPT

iptables -t nat -A PREROUTING -i ppp0 -p udp --dport 4000 -j DNAT --to-destination $hip
iptables -t nat -A POSTROUTING -o eth0 -p udp --dport 4000 -j SNAT --to-source $LAN_IP
iptables -A FORWARD -i ppp0 -m state --state NEW -p udp -d $hip --dport 4000 -j ACCEPT



der win98 rechner hat selbstverstaendlich keine fw

@cart gut da muss ich nochma gezielt nach suchen, mal sehen ;)
 

cart

Technik/Software Forum
Mitglied seit
01.08.2002
Beiträge
4.873
Reaktionen
0
Ort
New York
Hmm habe grad mal gesucht, den Thread aber auch nicht mehr gefunden. Ist aber auch schon sehr lange her. Deshalb jetzt hier nochmal das Script, das früher auf meinem Linuxrouter lief. Lief damals unter suse7 oder 8. Müsste also ggf. etwas angepasst werden. Ist allerdings nicht sehr tragisch!

! /bin/bash
# Copyright (c) 2001, Timor Sommer
#
# Author: Timor Sommer <timor@timor-home.de>
#
# init.d/FOO
#
# and symbolic its link
#
# /sbin/rcFOO
#
# System startup script for Timors cusomized firewall
#

# Source SuSE config
. /etc/rc.config

# Determine the base and follow a runlevel link name.
base=${0##*/}
link=${base#*[SK][0-9][0-9]}

# Force execution if not called by a runlevel directory.
test $link = $base && START_TSFW=yes
test "$START_TSFW" = yes || exit 0

# Shell functions sourced from /etc/rc.status:
# rc_check check and set local and overall rc status
# rc_status check and set local and overall rc status
# rc_status -v ditto but be verbose in local rc status
# rc_status -v -r ditto and clear the local rc status
# rc_failed set local and overall rc status to failed
# rc_failed <num> set local and overall rc status to <num><num>
# rc_reset clear local rc status (overall remains)
# rc_exit exit appropriate to overall rc status
. /etc/rc.status

# First reset status of this service
rc_reset

# Return values acc. to LSB for all commands but status:
# 0 - success
# 1 - generic or unspecified error
# 2 - invalid or excess argument(s)
# 3 - unimplemented feature (e.g. "reload")
# 4 - insufficient privilege
# 5 - program is not installed
# 6 - program is not configured
# 7 - program is not running
#
# Note that starting an already running service, stopping
# or restarting a not-running service as well as the restart
# with force-reload (in case signalling is not supported) are
# considered a success.


# set some vars
PTABLES=iptables
#IPTABLES="echo iptables "

WORLD_IF=ppp0

LAN_IF=eth1
LAN_IP=192.168.0.2
LAN_NET=192.168.0.0
LAN_MASK=255.255.255.0
LAN_BCAST=192.168.0.255

FORWARD_IP=192.168.0.5


HIGHPORTS=1024:65535

case "$1" in
start)
echo -n "Starting Timor's customized firewall"

# setup some kernel stuff
echo 1 > /proc/sys/net/ipv4/ip_forward
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_all
echo 1 > /proc/sys/net/ipv4/ip_dynaddr
echo 0 > /proc/sys/net/ipv4/tcp_ecn
echo 0 > /proc/sys/net/ipv4/tcp_syncookies

# default policies: drop everything in table filter
$IPTABLES -P INPUT DROP
$IPTABLES -P OUTPUT DROP
$IPTABLES -P FORWARD DROP
$IPTABLES -t nat -P PREROUTING ACCEPT
$IPTABLES -t nat -P POSTROUTING ACCEPT
$IPTABLES -t nat -P OUTPUT ACCEPT

# make sure, our packets don't need to be fragmented on their way
$IPTABLES -A FORWARD -o $WORLD_IF -p tcp --tcp-flags SYN,RST SYN -m tcpmss --mss 1451: -j TCPMSS --set-mss 1450
$IPTABLES -A OUTPUT -o $WORLD_IF -p tcp --tcp-flags SYN,RST SYN -m tcpmss --mss 1451: -j TCPMSS --set-mss 1450

# allow traffic from lan to world, for each each supported protocol on top of ip
# 2 entries, one for outgoing traffic, one for incoming
$IPTABLES -A FORWARD -p TCP -i $LAN_IF -o $WORLD_IF -s ${LAN_NET}/${LAN_MASK} -j ACCEPT
$IPTABLES -A FORWARD -p TCP -i $WORLD_IF -o $LAN_IF -d ${LAN_NET}/${LAN_MASK} ! --syn -j ACCEPT

$IPTABLES -A FORWARD -p UDP -i $LAN_IF -o $WORLD_IF -s ${LAN_NET}/${LAN_MASK} -j ACCEPT
$IPTABLES -A FORWARD -p UDP -i $WORLD_IF -o $LAN_IF -d ${LAN_NET}/${LAN_MASK} -j ACCEPT

$IPTABLES -A FORWARD -p ICMP -i $LAN_IF -o $WORLD_IF -s ${LAN_NET}/${LAN_MASK} -j ACCEPT
$IPTABLES -A FORWARD -p ICMP -i $WORLD_IF -o $LAN_IF -d ${LAN_NET}/${LAN_MASK} -j ACCEPT

# allow the lan to access everthing on the firewall, including traffic backwards
$IPTABLES -A INPUT -i $LAN_IF -s ${LAN_NET}/${LAN_MASK} -d $LAN_IP -j ACCEPT
$IPTABLES -A INPUT -i $LAN_IF -s ${LAN_NET}/${LAN_MASK} -d $LAN_BCAST -j ACCEPT
$IPTABLES -A OUTPUT -o $LAN_IF -s $LAN_IP -d ${LAN_NET}/${LAN_MASK} -j ACCEPT

# allow ssh connections from the world, including reverse traffic
$IPTABLES -A INPUT -p TCP -i $WORLD_IF --sport $HIGHPORTS --dport ssh -j ACCEPT
$IPTABLES -A OUTPUT -p TCP -o $WORLD_IF --dport $HIGHPORTS --sport ssh ! --syn -j ACCEPT


# allow everthing on lo locally
$IPTABLES -A INPUT -i lo -j ACCEPT
$IPTABLES -A OUTPUT -o lo -j ACCEPT

# allow the router to access the internet, TCP and ICMP only, UDP for DNS
$IPTABLES -A OUTPUT -p TCP -o $WORLD_IF -j ACCEPT
$IPTABLES -A INPUT -p TCP -i $WORLD_IF ! --syn -j ACCEPT

$IPTABLES -A OUTPUT -p ICMP -o $WORLD_IF -j ACCEPT
$IPTABLES -A INPUT -p ICMP -i $WORLD_IF -j ACCEPT

$IPTABLES -A OUTPUT -p UDP -o $WORLD_IF --sport $HIGHPORTS --dport domain -j ACCEPT
$IPTABLES -A INPUT -p UDP -i $WORLD_IF --dport $HIGHPORTS --sport domain -j ACCEPT

# Masquerade the traffic from the local net to world via World-IF
$IPTABLES -t nat -A POSTROUTING -o $WORLD_IF -s ${LAN_NET}/${LAN_MASK} -j MASQUERADE

# redirect some Highports on this machine to clients on the lan to be reachable from
# the internet for ICQ or IRC-DCC and the

# ident
$IPTABLES -t nat -A PREROUTING -p TCP -i $WORLD_IF --dport 113 -j DNAT --to-destination $FORWARD_IP
$IPTABLES -t nat -A PREROUTING -p UDP -i $WORLD_IF --dport 113 -j DNAT --to-destination $FORWARD_IP
$IPTABLES -A FORWARD -p TCP -i $WORLD_IF -o $LAN_IF -d $FORWARD_IP --dport 113 -j ACCEPT
$IPTABLES -A FORWARD -p UDP -i $WORLD_IF -o $LAN_IF -d $FORWARD_IP --dport 113 -j ACCEPT
$IPTABLES -t nat -A PREROUTING -p TCP -i $WORLD_IF --dport 30000:31999 -j DNAT --to-destination $FORWARD_IP
$IPTABLES -t nat -A PREROUTING -p UDP -i $WORLD_IF --dport 30000:31999 -j DNAT --to-destination $FORWARD_IP
$IPTABLES -A FORWARD -p TCP -i $WORLD_IF -o $LAN_IF -d $FORWARD_IP --dport 30000:31999 -j ACCEPT
$IPTABLES -A FORWARD -p UDP -i $WORLD_IF -o $LAN_IF -d $FORWARD_IP --dport 30000:31999 -j ACCEPT

$IPTABLES -t nat -A PREROUTING -p TCP -i $WORLD_IF --dport 32000:32999 -j DNAT --to-destination 192.168.0.4
$IPTABLES -t nat -A PREROUTING -p UDP -i $WORLD_IF --dport 32000:32999 -j DNAT --to-destination 192.168.0.4
$IPTABLES -A FORWARD -p TCP -i $WORLD_IF -o $LAN_IF -d 192.168.0.4 --dport 32000:32999 -j ACCEPT
$IPTABLES -A FORWARD -p UDP -i $WORLD_IF -o $LAN_IF -d 192.168.0.4 --dport 32000:32999 -j ACCEPT

# esel
$IPTABLES -t nat -A PREROUTING -p TCP -i $WORLD_IF --dport 4662 -j DNAT --to-destination $FORWARD_IP
$IPTABLES -A FORWARD -p UDP -i $WORLD_IF -o $LAN_IF -d $FORWARD_IP --dport 4672 -j ACCEPT
$IPTABLES -A FORWARD -p TCP -i $WORLD_IF -o $LAN_IF -d $FORWARD_IP --dport 4662 -j ACCEPT
$IPTABLES -t nat -A PREROUTING -p UDP -i $WORLD_IF --dport 4672 -j DNAT --to-destination $FORWARD_IP

# portforwarding for bc
$IPTABLES -t nat -A PREROUTING -p tcp --dport 2300:2400 -i $WORLD_IF -j DNAT --to $FORWARD_IP
$IPTABLES -t nat -A PREROUTING -p udp --dport 2300:2400 -i $WORLD_IF -j DNAT --to $FORWARD_IP
$IPTABLES -t nat -A PREROUTING -p tcp --dport 47624 -i $WORLD_IF -j DNAT --to $FORWARD_IP:47624
$IPTABLES -t nat -A PREROUTING -p udp --dport 47624 -i $WORLD_IF -j DNAT --to $FORWARD_IP:47624
$IPTABLES -t nat -A PREROUTING -p udp --dport 28800:28900 -i $WORLD_IF -j DNAT --to $FORWARD_IP

# allow bc connection form outside
$IPTABLES -A FORWARD -i $WORLD_IF -o $LAN_IF -d $FORWARD_IP -p udp --dport 2300:2400 -j ACCEPT
$IPTABLES -A FORWARD -i $WORLD_IF -o $LAN_IF -d $FORWARD_IP -p tcp --dport 2300:2400 -j ACCEPT
$IPTABLES -A FORWARD -i $WORLD_IF -o $LAN_IF -d $FORWARD_IP -p tcp --dport 47624 -j ACCEPT
$IPTABLES -A FORWARD -i $WORLD_IF -o $LAN_IF -d $FORWARD_IP -p udp --dport 47624 -j ACCEPT
$IPTABLES -A FORWARD -i $WORLD_IF -o $LAN_IF -d $FORWARD_IP -p udp --dport 28800:28900 -j ACCEPT
# ts2 server
$IPTABLES -t nat -A PREROUTING -p tcp --dport 8767 -i $WORLD_IF -j DNAT --to $FORWARD_IP
$IPTABLES -t nat -A PREROUTING -p udp --dport 8767 -i $WORLD_IF -j DNAT --to $FORWARD_IP

# special redirects
$IPTABLES -t nat -A PREROUTING -p TCP -i $WORLD_IF --dport 8080 -j DNAT --to-destination $FORWARD_IP # Webcam auf 8080
$IPTABLES -A FORWARD -p TCP -i $WORLD_IF -o $LAN_IF -d $FORWARD_IP --dport 8080 -j ACCEPT

$IPTABLES -t nat -A PREROUTING -p TCP -i $WORLD_IF --dport 80 -j DNAT --to-destination $FORWARD_IP # Apache auf 80
$IPTABLES -A FORWARD -p TCP -i $WORLD_IF -o $LAN_IF -d $FORWARD_IP --dport 80 -j ACCEPT

$IPTABLES -t nat -A PREROUTING -p UDP -i $WORLD_IF --dport 9110:9111 -j DNAT --to-destination $FORWARD_IP # GV
$IPTABLES -A FORWARD -p UDP -i $WORLD_IF -o $LAN_IF -d $FORWARD_IP --dport 9110:9111 -j ACCEPT

$IPTABLES -t nat -A PREROUTING -p UDP -i $WORLD_IF --dport 2302:2400 -j DNAT --to-destination $FORWARD_IP # DS
$IPTABLES -A FORWARD -p UDP -i $WORLD_IF -o $LAN_IF -d $FORWARD_IP --dport 2302:2400

$IPTABLES -t nat -A PREROUTING -p UDP -i $WORLD_IF --dport 6073 -j DNAT --to-destination $FORWARD_IP # DS
$IPTABLES -A FORWARD -p UDP -i $WORLD_IF -o $LAN_IF -d $FORWARD_IP --dport 6073

# transparent proxying
# $IPTABLES -t nat -A PREROUTING -p TCP -i $LAN_IF --dport http -j REDIRECT --to-ports 8080

# allow all ICMP traffic for testing
# $IPTABLES -A INPUT -p ICMP -j ACCEPT
# $IPTABLES -A OUTPUT -p ICMP -j ACCEPT
# $IPTABLES -A FORWARD -p ICMP -j ACCEPT
# Add logging for dropped packets
$IPTABLES -A INPUT -j LOG --log-prefix "drop INPUT "
$IPTABLES -A OUTPUT -j LOG --log-prefix "drop OUTPUT "
$IPTABLES -A FORWARD -j LOG --log-prefix "drop FORWARD "

# Remember status and be verbose
rc_status -v
;;
stop)
echo -n "Shutting down Timor's customized firewall"
## Stop daemon with killproc(8) and if this fails
## set echo the echo return value.

# disable forwarding, mainly for security
echo 0 > /proc/sys/net/ipv4/ip_forward

# reset default policies
$IPTABLES -P INPUT ACCEPT
$IPTABLES -P OUTPUT ACCEPT
$IPTABLES -P FORWARD ACCEPT
$IPTABLES -t nat -P PREROUTING ACCEPT
$IPTABLES -t nat -P POSTROUTING ACCEPT
$IPTABLES -t nat -P OUTPUT ACCEPT

# flush all modified chains, since default is empty
$IPTABLES -F INPUT
$IPTABLES -F OUTPUT
$IPTABLES -F FORWARD
$IPTABLES -t nat -F
$IPTABLES -t nat -F
$IPTABLES -t nat -F

# Remember status and be verbose
rc_status -v
;;
restart)
## Stop the service and regardless of whether it was
## running or not, start it again.
$0 stop
$0 start

# Remember status and be quiet
rc_status
;;
force-reload)
## Signal the daemon to reload its config. Most daemons
## do this on signal 1 (SIGHUP).
## If it does not support it, restart.

echo -n "Reload Timor's coustomized firewall"
$0 stop && $0 start
rc_status
;;
reload)
## Like force-reload, but if daemon does not support
## signalling, do nothing (!)

rc_failed 3
rc_status -v
;;
*)
echo "Usage: $0 {start|stop|try-restart|restart|force-reload|reload}"
exit 1
;;
esac
rc_exit
 

freeka

Guest
danke, mh aber bei mir laeuft schon nen eigenes script; ich wuerde vllt versuchen die entsprechenden parts zu uebernehmen&anzupassen, aber leider kommt in deinem ganzen script net einmal der port 6112 vor.. an welcher stelle forwardest du denn den port?
 

cart

Technik/Software Forum
Mitglied seit
01.08.2002
Beiträge
4.873
Reaktionen
0
Ort
New York
Hmm stimmt. Ist in der Version gar nicht drin. Ist aber nicht weiter tragisch, denn du kannst das hier als Vorlage nehmen:
# ts2 server
$IPTABLES -t nat -A PREROUTING -p tcp --dport 8767 -i $WORLD_IF -j DNAT --to $FORWARD_IP
$IPTABLES -t nat -A PREROUTING -p udp --dport 8767 -i $WORLD_IF -j DNAT --to $FORWARD_IP
Einfach ein paar neue Zeilen einfügen:
# bnet
$IPTABLES -t nat -A PREROUTING -p tcp --dport 6112 -i $WORLD_IF -j DNAT --to $FORWARD_IP
$IPTABLES -t nat -A PREROUTING -p udp --dport 6112 -i $WORLD_IF -j DNAT --to $FORWARD_IP
 

freeka

Guest
jo, aber wie du siehst sind diese zeilen nichts anderes als das was ich schon in meinem script habe ;)
 
Oben