[Linux] Port forward naar buiten lukt niet

Pagina: 1
Acties:

  • doltishDuke
  • Registratie: Februari 2005
  • Laatst online: 10:37
Ik heb hier..

- Een usenet account bij XLNed waarbij ik 4 connecties tot mijn beschikking heb
- 2 ADSL aansluitingen (beide in hetzelfde netwerk) van 6 en 3 mbit down
- 2 gateways (simpele huis- tuin- en keukenrouters met ingebouwde switch)
- Een Linux Debian Etch server met IPTables v. 1.3.6 en IPMasq v. 4.0.8
- Een workstation met SABnzbd+

Nou heb ik mijn workstation normaal gesproken op de 6 mbit verbinding (bij gateway 10.0.0.100) zitten zodat ik zelf beschikking heb over redelijk snel internet. De server handelt hier vooral lokaal dingen af (filesharing) en hangt daarom aan de 3 mbit verbinding op 10.0.0.101.

Als ik nu op mijn workstation download van usenet pak ik dus de 6 mbit lijn. Toen de server in kwestie nog Windows 2000 draaide was het me gelukt op met wat software (NetworkActiv AUTAPF) de poort 1993 te forwarden naar de reader van XLNed op poort 119. Zo kon ik in SABnzbd+ als server invoeren 10.0.1.100:1993 en beschikte ik zo ook over de 3 mbit lijn waardoor ik 9 mbit download had in totaal. Totdat vanwege licentie redenen Windows er vanaf moest en er Linux Debian op kwam. Ik krijg het nu niet voor elkaar de poort te forwarden.

Even ter verduidelijking een ASCII opzetje van mijn netwerk:

code:
1
2
3
4
5
6
7
8
9
ADSL connectie 1 (6 mbit)            ADSL connectie 2 (3 mbit)
         |                                      |
   ______|______                          ______|______
  | Router + Sw |                        | Router + Sw |
  |_10.0.0.100__|------------------------|_10.0.0.101__|
         |                                      |
   ______|______                          ______|______
  | Server      |                        | Workstation |
  |_10.0.1.100__|                        |_10.0.3.100__|


Wat ik dus wil is dat als ik vanaf het workstation verbinding maak met 10.0.1.100:1993 (in hetzelfde netwerk dus) deze laatste de verbinding forward over gateway 10.0.0.101 naar de reader van XLNed op 85.12.40.146 op poort 119. Ik ben met behulp van de manual van Debian hierop uitgekomen..


code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
server1:~# iptables -A PREROUTING -t nat -p tcp --dport 1993 -j DNAT --to 85.12.40.146:119
server1:~# iptables -A FORWARD -p tcp -m state --state NEW -d 85.12.40.146 --dport 119 -j ACCEPT
server1:~# iptables-save
# Generated by iptables-save v1.3.6 on Tue Jul  1 20:38:14 2008
*mangle
:PREROUTING ACCEPT [1905:242061]
:INPUT ACCEPT [2485:246907]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [1189:148735]
:POSTROUTING ACCEPT [1817:216179]
COMMIT
# Completed on Tue Jul  1 20:38:14 2008
# Generated by iptables-save v1.3.6 on Tue Jul  1 20:38:14 2008
*filter
:INPUT DROP [1:40]
:FORWARD DROP [0:0]
:OUTPUT DROP [0:0]
-A INPUT -i lo -j ACCEPT
-A INPUT -s 127.0.0.0/255.0.0.0 -i ! lo -j LOG
-A INPUT -s 127.0.0.0/255.0.0.0 -i ! lo -j DROP
-A INPUT -d 255.255.255.255 -i eth0 -j ACCEPT
-A INPUT -d 10.0.1.100 -i eth0 -j ACCEPT
-A INPUT -d 10.0.255.255 -i eth0 -j ACCEPT
-A INPUT -j LOG
-A INPUT -j DROP
-A FORWARD -j LOG
-A FORWARD -j DROP
-A FORWARD -d 85.12.40.146 -p tcp -m state --state NEW -m tcp --dport 119 -j ACCEPT
-A OUTPUT -o lo -j ACCEPT
-A OUTPUT -d 255.255.255.255 -o eth0 -j ACCEPT
-A OUTPUT -s 10.0.1.100 -o eth0 -j ACCEPT
-A OUTPUT -s 10.0.255.255 -o eth0 -j ACCEPT
-A OUTPUT -j LOG
-A OUTPUT -j DROP
COMMIT
# Completed on Tue Jul  1 20:38:14 2008
# Generated by iptables-save v1.3.6 on Tue Jul  1 20:38:14 2008
*nat
:PREROUTING ACCEPT [623:99257]
:POSTROUTING ACCEPT [28:3504]
:OUTPUT ACCEPT [28:3504]
COMMIT
# Completed on Tue Jul  1 20:38:14 2008
server1:~# ipmasq
server1:~#


Maar als ik vervolgens in de logs van SABnzbd+ ga kijken staat er dit:
2008-07-01 21:03:20,928 ERROR [newswrapper] Failed to connect: (10061, 'Connection refused') 1@10.0.1.100:1993
2008-07-01 21:03:21,019 ERROR [newswrapper] Failed to connect: (10061, 'Connection refused') 2@10.0.1.100:1993
2008-07-01 21:05:19,937 WARNING [downloader] Thread 1@10.0.1.100:1993: timed out
2008-07-01 21:05:20,013 WARNING [downloader] Thread 2@10.0.1.100:1993: timed out
Werkt dus niet.. Iemand enig idee hoe ik dit kan laten werken?

  • TrailBlazer
  • Registratie: Oktober 2000
  • Laatst online: 07-02 09:48

TrailBlazer

Karnemelk FTW

Doe eens iptables -nvL en iptables -nvL -t nat dat leest wat makkelijker.

  • doltishDuke
  • Registratie: Februari 2005
  • Laatst online: 10:37
Done:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
server1:~# clear
server1:~# iptables -nvL
Chain INPUT (policy DROP 1 packets, 40 bytes)
 pkts bytes target     prot opt in     out     source               destination 
    0     0 ACCEPT     0    --  lo     *       0.0.0.0/0            0.0.0.0/0   
    0     0 LOG        0    --  !lo    *       127.0.0.0/8          0.0.0.0/0           LOG flags 0 level 4
    0     0 DROP       0    --  !lo    *       127.0.0.0/8          0.0.0.0/0   
    0     0 ACCEPT     0    --  eth0   *       0.0.0.0/0            255.255.255.255
  263 20595 ACCEPT     0    --  eth0   *       0.0.0.0/0            10.0.1.100  
   32  5175 ACCEPT     0    --  eth0   *       0.0.0.0/0            10.0.255.255
   12   432 LOG        0    --  *      *       0.0.0.0/0            0.0.0.0/0           LOG flags 0 level 4
   12   432 DROP       0    --  *      *       0.0.0.0/0            0.0.0.0/0   

Chain FORWARD (policy DROP 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination 
    0     0 LOG        0    --  *      *       0.0.0.0/0            0.0.0.0/0           LOG flags 0 level 4
    0     0 DROP       0    --  *      *       0.0.0.0/0            0.0.0.0/0   

Chain OUTPUT (policy DROP 21 packets, 19852 bytes)
 pkts bytes target     prot opt in     out     source               destination 
    0     0 ACCEPT     0    --  *      lo      0.0.0.0/0            0.0.0.0/0   
    0     0 ACCEPT     0    --  *      eth0    0.0.0.0/0            255.255.255.255
  199 23820 ACCEPT     0    --  *      eth0    10.0.1.100           0.0.0.0/0   
    0     0 ACCEPT     0    --  *      eth0    10.0.255.255         0.0.0.0/0   
    0     0 LOG        0    --  *      *       0.0.0.0/0            0.0.0.0/0           LOG flags 0 level 4
    0     0 DROP       0    --  *      *       0.0.0.0/0            0.0.0.0/0   
server1:~#
server1:~#
server1:~#
server1:~# iptables -nvL -t nat
Chain PREROUTING (policy ACCEPT 252 packets, 42046 bytes)
 pkts bytes target     prot opt in     out     source               destination 

Chain POSTROUTING (policy ACCEPT 10 packets, 1092 bytes)
 pkts bytes target     prot opt in     out     source               destination 

Chain OUTPUT (policy ACCEPT 10 packets, 1092 bytes)
 pkts bytes target     prot opt in     out     source               destination 
server1:~#

  • TrailBlazer
  • Registratie: Oktober 2000
  • Laatst online: 07-02 09:48

TrailBlazer

Karnemelk FTW

Hmm je nat entries zijn ieder geval niet opgeslagen/actief. Mischien eerst daar eens naar gaan kijken. Ik gebruik dat script ook nooit. Ik zet alle rules gewoon in een tekstfile en als ik nieuwe regels toevoeg flush ik eerst alles en configureer ik alles daarna opnieuw.

  • doltishDuke
  • Registratie: Februari 2005
  • Laatst online: 10:37
TrailBlazer schreef op dinsdag 01 juli 2008 @ 21:39:
Hmm je nat entries zijn ieder geval niet opgeslagen/actief. Mischien eerst daar eens naar gaan kijken. Ik gebruik dat script ook nooit. Ik zet alle rules gewoon in een tekstfile en als ik nieuwe regels toevoeg flush ik eerst alles en configureer ik alles daarna opnieuw.
Ik ben nog even wat aan het kloten geweest, eerst de boel geflushed en toen opnieuw dezelfde commando's getypt. Ik zou geen idee hebben wat ik anders gedaan heb, maar ze staan er nu wel bij..

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
server1:~# iptables -nvL
Chain INPUT (policy DROP 1 packets, 40 bytes)
 pkts bytes target     prot opt in     out     source               destination
    0     0 ACCEPT     0    --  lo     *       0.0.0.0/0            0.0.0.0/0
    0     0 LOG        0    --  !lo    *       127.0.0.0/8          0.0.0.0/0           LOG flags 0 level 4
    0     0 DROP       0    --  !lo    *       127.0.0.0/8          0.0.0.0/0
    0     0 ACCEPT     0    --  eth0   *       0.0.0.0/0            255.255.255.255
 1022 81286 ACCEPT     0    --  eth0   *       0.0.0.0/0            10.0.1.100
   45  5730 ACCEPT     0    --  eth0   *       0.0.0.0/0            10.0.255.255
   10   360 LOG        0    --  *      *       0.0.0.0/0            0.0.0.0/0           LOG flags 0 level 4
   10   360 DROP       0    --  *      *       0.0.0.0/0            0.0.0.0/0

Chain FORWARD (policy DROP 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination
   12   608 LOG        0    --  *      *       0.0.0.0/0            0.0.0.0/0           LOG flags 0 level 4
   12   608 DROP       0    --  *      *       0.0.0.0/0            0.0.0.0/0
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            85.12.40.146        state NEW tcp dpt:119

Chain OUTPUT (policy DROP 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination
    0     0 ACCEPT     0    --  *      lo      0.0.0.0/0            0.0.0.0/0
    0     0 ACCEPT     0    --  *      eth0    0.0.0.0/0            255.255.255.255
  913  125K ACCEPT     0    --  *      eth0    10.0.1.100           0.0.0.0/0
    0     0 ACCEPT     0    --  *      eth0    10.0.255.255         0.0.0.0/0
    0     0 LOG        0    --  *      *       0.0.0.0/0            0.0.0.0/0           LOG flags 0 level 4
    0     0 DROP       0    --  *      *       0.0.0.0/0            0.0.0.0/0
server1:~#
server1:~#
server1:~#
server1:~# iptables -nvL -t nat
Chain PREROUTING (policy ACCEPT 230 packets, 46029 bytes)
 pkts bytes target     prot opt in     out     source               destination
   12   608 DNAT       tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp dpt:1993 to:85.12.40.146:119

Chain POSTROUTING (policy ACCEPT 7 packets, 867 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain OUTPUT (policy ACCEPT 7 packets, 867 bytes)
 pkts bytes target     prot opt in     out     source               destination
server1:~#


Echter krijg ik nogsteeds timeouts in SABnzbd+. Overigens lukt het pingen vanaf de server naar 85.12.40.146 wel, dus dat is het probleem niet.

Edit: Ik ben er achter waarom m'n rules niet actief waren, ik had uit de manual begrepen dat je na iptables-save nog 'ipmasq' moest draaien om de rules actief te maken, maar blijkbaar gooit dat ze juist weg.

[ Voor 4% gewijzigd door doltishDuke op 01-07-2008 22:12 ]


Verwijderd

Ik denk dat het probleem het retourverkeer is. Als ik het goed begrijp heb je een plat netwerk (10.0.0.0/16) waar zowel je 2 routers als je server als je workstation in hangen.

Dit is wat er gebeurt (waar ik er even vanuit ga dat de sourceport 1024 is, maar dat kan alle poorten > 1024 zijn] en je externe ip 1.1.1.1

[S: 10.0.3.100:1024 D: 10.0.1.100:1993] Workstation -> Server
[S: 10.0.3.100:1024 D: 85.12.40.146:119] Server -> NNTP
[S: 1.1.1.1:1024 D:85.12.40.146:119] ADSL-router->NNTP
[S: 85.12.40.146:119 D: 1.1.1.1:1024] antwoord van NNTP -> ADSL
[S: 85.12.40.146:119 D: 10.0.3.100:1024] ADSL router NAT terug naar IP workstation
Workstation ontvangt nu een pakketje van 85.12.40.146, een host waar hij helemaal geen connectie mee heeft - hij zal dus een TCP RST sturen.

De oplossing is: het retourverkeer via de server forceren door ook het source IP te NATten

  • doltishDuke
  • Registratie: Februari 2005
  • Laatst online: 10:37
Verwijderd schreef op dinsdag 01 juli 2008 @ 22:22:
Ik denk dat het probleem het retourverkeer is. Als ik het goed begrijp heb je een plat netwerk (10.0.0.0/16) waar zowel je 2 routers als je server als je workstation in hangen.

Dit is wat er gebeurt (waar ik er even vanuit ga dat de sourceport 1024 is, maar dat kan alle poorten > 1024 zijn] en je externe ip 1.1.1.1

[S: 10.0.3.100:1024 D: 10.0.1.100:1993] Workstation -> Server
[S: 10.0.3.100:1024 D: 85.12.40.146:119] Server -> NNTP
[S: 1.1.1.1:1024 D:85.12.40.146:119] ADSL-router->NNTP
[S: 85.12.40.146:119 D: 1.1.1.1:1024] antwoord van NNTP -> ADSL
[S: 85.12.40.146:119 D: 10.0.3.100:1024] ADSL router NAT terug naar IP workstation
Workstation ontvangt nu een pakketje van 85.12.40.146, een host waar hij helemaal geen connectie mee heeft - hij zal dus een TCP RST sturen.

De oplossing is: het retourverkeer via de server forceren door ook het source IP te NATten
Dat zou kunnen. Ik ben op deze commands uitgekomen met jouw tip:

code:
1
2
3
4
5
server1:~# iptables -A PREROUTING -t nat -s 10.0.3.100 -p tcp --dport 1993 -j DNAT --to 85.12.40.146:119
server1:~# iptables -A INPUT -p tcp -m state --state NEW -s 85.12.40.146 -j ACCEPT
server1:~# iptables -A OUTPUT -p tcp -m state --state NEW -d 85.12.40.146 --dport 119 -j ACCEPT
server1:~# iptables -A FORWARD -p tcp -m state --state NEW -s 10.0.3.100 -d 85.12.40.146 --dport 119 -j ACCEPT
server1:~# iptables-save


Het werkt nog niet. Ik blijf timeouts krijgen.

  • TrailBlazer
  • Registratie: Oktober 2000
  • Laatst online: 07-02 09:48

TrailBlazer

Karnemelk FTW

Wat handiger werkt is een bestand met alle regels wat je executable maakt.
code:
1
2
3
4
5
6
7
8
9
10
11
12
#!/bin/bash
echo 1 >/proc/sys/net/ipv4/ip_forward

IPTABLES="/sbin/iptables"
IP6TABLES="/sbin/ip6tables"
$IPTABLES -t filter -P INPUT DROP
$IPTABLES -t filter -F INPUT
$IPTABLES -t filter -A INPUT -i lo -j ACCEPT
$IPTABLES -t filter -A INPUT -i eth0 -j ACCEPT
$IPTABLES -t filter -A INPUT -i eth0.100 -j ACCEPT
$IPTABLES -t filter -A INPUT -i eth0.101 -j ACCEPT
$IPTABLES -t filter -A INPUT -p 41 -j ACCEPT

dit is even een stukje uit mijn bestand. Ik voeg een regel toe aan het bestand en dan voer ik het gewoon opnieuw uit.
Pagina: 1