From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on sa.int.altlinux.org X-Spam-Level: X-Spam-Status: No, score=-1.5 required=5.0 tests=AWL, BAYES_00, WHOIS_DMNBYPROXY autolearn=no version=3.2.5 Date: Sat, 28 Mar 2009 18:45:13 +0200 From: Michael Shigorin To: sysadmins@lists.altlinux.org Message-ID: <20090328164513.GV20208@osdn.org.ua> Mail-Followup-To: sysadmins@lists.altlinux.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="e4Ac2VUIqaLF2Uxx" Content-Disposition: inline Content-Transfer-Encoding: 8bit User-Agent: Mutt/1.4.2.1i Subject: [Sysadmins] =?koi8-r?b?08vSydDUycsgxMzRINDP0tTGz9LXwdLEwSDOwSDE?= =?koi8-r?b?z9PUydbJzdnKIElQIMnaIMHM2NTF0s7B1MnX?= X-BeenThere: sysadmins@lists.altlinux.org X-Mailman-Version: 2.1.12 Precedence: list Reply-To: shigorin@gmail.com, ALT Linux sysadmin discuss List-Id: ALT Linux sysadmin discuss List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 28 Mar 2009 16:45:27 -0000 Archived-At: List-Archive: --e4Ac2VUIqaLF2Uxx Content-Type: text/plain; charset=koi8-r Content-Disposition: inline Content-Transfer-Encoding: 8bit Здравствуйте. Добрался поднять дома WiFi. Работает. Теперь добрался решить порождённую этим проблему портфорварда на хост с уже двумя интерфейсами -- городить несколько портов неудобно, поскольку маршрутизирующая система более приспособлена к проверке, как бы добраться до хоста, чем человек. Поскольку ничего существующего не нагуглилось по iptables forward "same port" different addresses iptables forward "same port" multiple destination -- самое близкое: http://ubuntuforums.org/archive/index.php/t-497781.html (а спрашивавшему IMHO стоило просто делать tcp reset на tcp/113: -A INPUT -p tcp -m tcp --dport 113 -j REJECT --reject-with tcp-reset), то был нарисован прицепленный скриптик, надеюсь, достаточно самодокументированный. При необходимости его можно обобщить от двух альтернатив, но решил не усложнять без таковой. Также здесь: http://fly.osdn.org.ua/~mike/works/misc/notebook-portforward -- ---- WBR, Michael Shigorin ------ Linux.Kiev http://www.linux.kiev.ua/ --e4Ac2VUIqaLF2Uxx Content-Type: text/plain; charset=us-ascii Content-Disposition: attachment; filename=notebook-portforward #!/bin/sh # check which IP is reachable since the notebook can be # connected via either Ethernet or WiFi, or both; # adjust portforwarding (which must otherwise be # already set up correctly -- like not forgetting # -A INPUT -d $IP -p tcp -m tcp --dport $DPT -j ACCEPT # # try to ping an already existing portforward target; # if unreachable or none, try to ping/add another one # # (c) 2009 Michael Shigorin # use, modify, distribute, cronjob this freely IP=EX.TER.NAL.IP # 123.45.67.8 IP_E=NOTE.BOOK.ETH.IP # 192.168.1.2 IP_W=NOTE.BOOK.WIFI.IP # 192.168.1.3 PORT=EXT_PORT # 12345 DPT=DEST_PORT # 22 COUNT=0 IFS=":" ipt() { iptables "$1" PREROUTING -t nat \ -d "$IP" -p tcp -m tcp \ --dport "$PORT" \ -j DNAT --to-destination "$2:$DPT" } remove() { ipt -D "$1"; } add() { ipt -A "$1"; } try() { ping -w1 "$1" >&/dev/null; } # is current one reachable? COUNT="`iptables -L PREROUTING -t nat -n \ | fgrep "dpt:$port" \ | ( while read header to dest rest; do try "$dest" && let COUNT=$COUNT+1 || remove "$dest" done; echo $COUNT )`" # any job left? [ "$COUNT" = 0 ] || exit for ip in "$IP_W" "$IP_E"; do try "$ip" && let COUNT=$COUNT+1 && add "$ip" && break done # any job still left? [ "$COUNT" = 0 ] || exit # safety net: add via wifi if nothing else currently possible add "$IP_W" --e4Ac2VUIqaLF2Uxx--