/ Forside / Teknologi / Operativsystemer / Linux / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Linux
#NavnPoint
o.v.n. 11177
peque 7911
dk 4814
e.c 2359
Uranus 1334
emesen 1334
stone47 1307
linuxrules 1214
Octon 1100
10  BjarneD 875
Mere IP/Port-sjov
Fra : Martin [TMM]


Dato : 08-02-09 20:41

Hej

Nogen husker måske at jeg på et tidspunkt var interesseret i at forwarde en
port på en (mips)maskine, således at når jeg connectede til localhost:port,
blev det routet videre til en anden maskine på mit netværk. Jeg blev dengang
[1] rådet til at kigge på netcat. Jeg fik da også brygget noget brugbart
sammen, men det var ikke helt så stabilt som jeg havde ønsket mig. Det var
bl.a. ikke så god til at holde styr på hvornår min fjernmaskine droppede
forbindelsen.

Mit problem var dengang at jeg ikke havde iptables til rådighed på denne
mips-baserede maskine.
Jeg har i mellemtiden fået frembragt iptables-funktionalitet på maskinen, og
var så i denne weekend ved at kigge på at få det til at spille med et
iptables-script.
Men nu, med en del mindre hår på hovedet, og blåfrosne fingre af at forsøge
mig frem og google mig til det jeg ikke selv kan regne ud, er jeg ikke
kommet meget nærmere.

Jeg kan få mit script til at forwarde til en anden port på samme maskine,
men ikke hvis det skal routes videre til den anden maskine.
Jeg har været i spekulationer om det var fordi jeg forsøger at gå begge
veje, på samme interface. Forsøgte at oprette et alias med et andet
ip-range, for at se om det skulle ændre noget, men nej. Jeg kunne ikke få
det til at spille.

Mips-boksen har ip 192.168.1.130 - IP'en jeg vil forwarde til har
192.168.1.135.
Så længe jeg forwarder til egen ip, er der ingen slinger i valsen. Når jeg
ændrer --to til .135 begynder jeg at tabe trådene.
I dette eksempel forsøger jeg bare på at forwarde en tilfeældig port til
boksens egen telnetd, så jeg hurtigt kan se om det virker eller ej.
---
iptables -A FORWARD -i eth0 -j ACCEPT -p tcp --dport 8081
iptables -t nat -A PREROUTING -p tcp --dport 8081 -j DNAT --to
192.168.1.130:23
---

Hvad er det jeg overser?

Pft for råd.

Mvh
Martin

[1].: 12 oktober 2008 -
http://groups.google.com/group/dk.edb.system.unix/browse_thread/thread/3078e97399bdaeed/d0124eaf0f6328f3?lnk=gst&q=martin+[tmm]#d0124eaf0f6328f3



 
 
Kent Friis (08-02-2009)
Kommentar
Fra : Kent Friis


Dato : 08-02-09 21:18

Den Sun, 8 Feb 2009 20:40:54 +0100 skrev Martin [TMM]:
>
> Jeg kan få mit script til at forwarde til en anden port på samme maskine,
> men ikke hvis det skal routes videre til den anden maskine.
> Jeg har været i spekulationer om det var fordi jeg forsøger at gå begge
> veje, på samme interface. Forsøgte at oprette et alias med et andet
> ip-range, for at se om det skulle ændre noget, men nej. Jeg kunne ikke få
> det til at spille.
>
> Mips-boksen har ip 192.168.1.130 - IP'en jeg vil forwarde til har
> 192.168.1.135.
> Så længe jeg forwarder til egen ip, er der ingen slinger i valsen. Når jeg
> ændrer --to til .135 begynder jeg at tabe trådene.
> I dette eksempel forsøger jeg bare på at forwarde en tilfeældig port til
> boksens egen telnetd, så jeg hurtigt kan se om det virker eller ej.
> ---
> iptables -A FORWARD -i eth0 -j ACCEPT -p tcp --dport 8081
> iptables -t nat -A PREROUTING -p tcp --dport 8081 -j DNAT --to
> 192.168.1.130:23
> ---
>
> Hvad er det jeg overser?

Retur-vejen.

Du ændrer ikke på afsender-adressen, og derfor vil .135 svare direkte
tilbage. Hvis .130 er gateway for .135 når den sender svaret, skal
..130 nok sørge for at "un-NAT'e" svaret. Men hvor trafikken fra 135
ikke går igennem .130, vil den oprindelige afsender tænke ".135? Den
har jeg ikke noget at gøre med, jeg snakker kun med .130", og afvise
trafikken.

I det tilfælde skal DNAT kombineres med SNAT, så .130 bliver afsender
på det den videresender til .135. På den måde sikres det at trafikken
kommer tilbage til .130, og bliver un-NAT'et korrekt.

Fx:
iptables -t nat -A POSTROUTING -p tcp -s ! 192.168.1.130 -d 192.168.1.135 -j SNAT --to-source 192.168.1.130

Mvh
Kent
--
Hvis en sort kat går over vejen foran en bil, betyder det ulykke

.... for katten.

Martin [TMM] (08-02-2009)
Kommentar
Fra : Martin [TMM]


Dato : 08-02-09 22:31

Hej Kent
Kent Friis wrote:
> Retur-vejen.

Det lyder jo egentlig logisk nok... Min første indskydelse var da også:
"nåja!"
Men et par forsøg senere er der ikke rigtig sket nogen ændring.
Det jeg spekulerer lidt på, er hvordan postroutingen ved hvor svaret skal
sendes hen? Altså at det skal til 192.168.1.100 i det her tilfælde.

> Fx:
> iptables -t nat -A POSTROUTING -p tcp -s ! 192.168.1.130 -d
> 192.168.1.135 -j SNAT --to-source 192.168.1.130

Uden at jeg her skal komme nærmere ind på min manglende evne til at snakke
iptables'sk, så er jeg kommet frem til dette, der ser ud til at gøre
tricket.
---
iptables -A FORWARD -i eth0 -o eth0 -p tcp --dport 8084 -m state --state
NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A PREROUTING -t nat -p tcp -d 192.168.1.130 --dport 8084 -m
state --state NEW,ESTABLISHED,RELATED -j DNAT --to 192.168.1.135:23
iptables -t nat -A POSTROUTING -p tcp -s ! 192.168.1.130 -d 192.168.1.135 -j
SNAT --to-source 192.168.1.130
---

Og efter at have skudt denne mere eller mindre vigtige linje afsted, ser det
faktisk ud til at det virker.
echo 1 > /proc/sys/net/ipv4/ip_forward

Det huer mig dog ikke at jeg ikke er i stand til at telnette ind på port
8084 på maskinen selv (.130), og få fat i port 23 på .135 maskinen. Jeg er
dog lidt i tvivl om det er telnetklienten der laver numre med mig.
Det virker når jeg gør det fra en tredje maskine.
Jeg siger mange tak for indsparket.

Mvh
Martin



Kent Friis (09-02-2009)
Kommentar
Fra : Kent Friis


Dato : 09-02-09 19:32

Den Sun, 8 Feb 2009 22:30:57 +0100 skrev Martin [TMM]:
> Hej Kent
> Kent Friis wrote:
>> Retur-vejen.
>
> Det lyder jo egentlig logisk nok... Min første indskydelse var da også:
> "nåja!"
> Men et par forsøg senere er der ikke rigtig sket nogen ændring.
> Det jeg spekulerer lidt på, er hvordan postroutingen ved hvor svaret skal
> sendes hen? Altså at det skal til 192.168.1.100 i det her tilfælde.

Connection tracking. Hvor den gamle ipchains kun kiggede på pakker,
så kigger iptables på connections. Den ved præcist hvilken connection
der er tale om, og dermed hvor svaret skal sendes hen.

> iptables -A PREROUTING -t nat -p tcp -d 192.168.1.130 --dport 8084 -m
> state --state NEW,ESTABLISHED,RELATED -j DNAT --to 192.168.1.135:23
>
> Det huer mig dog ikke at jeg ikke er i stand til at telnette ind på port
> 8084 på maskinen selv (.130), og få fat i port 23 på .135 maskinen.

Der er et sæt regler mere, svarende til PREROUTING, der hedder OUTPUT.
Disse regler gælder for lokal trafik, på samme måde som PREROUTING
gælder gennemgående trafik.

> Jeg er
> dog lidt i tvivl om det er telnetklienten der laver numre med mig.

Telnet? Hvad med at bruge SSH?

Mvh
Kent
--
Hvis en sort kat går over vejen foran en bil, betyder det ulykke

.... for katten.

Søg
Reklame
Statistik
Spørgsmål : 177580
Tips : 31968
Nyheder : 719565
Indlæg : 6409079
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste