All of lore.kernel.org
 help / color / mirror / Atom feed
* UDP port redirect
@ 2007-07-31 23:04 thiago
  2007-08-01  6:07 ` Martijn Lievaart
  2007-08-01  7:05 ` Покотиленко Костик
  0 siblings, 2 replies; 5+ messages in thread
From: thiago @ 2007-07-31 23:04 UTC (permalink / raw)
  To: netfilter


Hello all,

I got a problem when redirecting a UDP port. The rules are:

# TCP port redirect - working fine:

iptables -t nat -A PREROUTING -i <ext_if> -p tcp -d <ext_ip> --dport 22 -j
DNAT -m state --state NEW --to <int_ip>:1194
iptables -A FORWARD -i <ext_if> -p tcp -d <int_ip> --dport 1194 -m state
--state NEW -j ACCEPT

# UDP port redirect - not going through

iptables -t nat -A PREROUTING -i <ext_if> -p udp -d <ext_ip> --dport 22 -j
DNAT -m state --state NEW --to <int_ip>:1194
iptables -A FORWARD -i <ext_if> -p udp -d <int_ip> --dport 1194 -m state
--state NEW -j ACCEPT

I hit the nat/prerouting rule, but never reach the filter/forward one.
As you can see the only change I've made from the tcp rule to udp rule, is
just the matching protocol.
I can debug it a little more, but also would like to hear from you guys if
you have any hints.

iptables v1.3.8
2.6.16.36-default

Thanks !

Thiago.



^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: UDP port redirect
  2007-07-31 23:04 UDP port redirect thiago
@ 2007-08-01  6:07 ` Martijn Lievaart
  2007-08-01  7:05 ` Покотиленко Костик
  1 sibling, 0 replies; 5+ messages in thread
From: Martijn Lievaart @ 2007-08-01  6:07 UTC (permalink / raw)
  To: thiago; +Cc: netfilter

thiago@powers.com.br wrote:
> Hello all,
>
> I got a problem when redirecting a UDP port. The rules are:
>
> # TCP port redirect - working fine:
>
> iptables -t nat -A PREROUTING -i <ext_if> -p tcp -d <ext_ip> --dport 22 -j
> DNAT -m state --state NEW --to <int_ip>:1194
> iptables -A FORWARD -i <ext_if> -p tcp -d <int_ip> --dport 1194 -m state
> --state NEW -j ACCEPT
>
> # UDP port redirect - not going through
>
> iptables -t nat -A PREROUTING -i <ext_if> -p udp -d <ext_ip> --dport 22 -j
> DNAT -m state --state NEW --to <int_ip>:1194
> iptables -A FORWARD -i <ext_if> -p udp -d <int_ip> --dport 1194 -m state
> --state NEW -j ACCEPT
>
> I hit the nat/prerouting rule, but never reach the filter/forward one.
> As you can see the only change I've made from the tcp rule to udp rule, is
> just the matching protocol.
> I can debug it a little more, but also would like to hear from you guys if
> you have any hints.
>   

Not sure why this doesn't work, but you don't need the state match in 
the NAT rule.

iptables -t nat -A PREROUTING -i <ext_if> -p udp -d <ext_ip> --dport 22 -j DNAT  --to <int_ip>:1194
iptables -A FORWARD -i <ext_if> -p udp -d <int_ip> --dport 1194 -m state --state NEW -j ACCEPT


should work.

You may want to add an explicit LOG rule:

iptables -A FORWARD -i <ext_if> -p udp -d <int_ip> --dport 1194 -j LOG --log-prefix "WRONG: "

or even

iptables -A FORWARD -p udp --dport 1194 -j LOG --log-prefix "WRONG: "


after the ACCEPT rule to debug this.

M4




^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: UDP port redirect
  2007-07-31 23:04 UDP port redirect thiago
  2007-08-01  6:07 ` Martijn Lievaart
@ 2007-08-01  7:05 ` Покотиленко Костик
  1 sibling, 0 replies; 5+ messages in thread
From: Покотиленко Костик @ 2007-08-01  7:05 UTC (permalink / raw)
  To: thiago; +Cc: netfilter

В Вто, 31/07/2007 в 20:04 -0300, thiago@powers.com.br пишет:
> Hello all,
> 
> I got a problem when redirecting a UDP port. The rules are:
> 
> # TCP port redirect - working fine:
> 
> iptables -t nat -A PREROUTING -i <ext_if> -p tcp -d <ext_ip> --dport 22 -j
> DNAT -m state --state NEW --to <int_ip>:1194
> iptables -A FORWARD -i <ext_if> -p tcp -d <int_ip> --dport 1194 -m state
> --state NEW -j ACCEPT

"-m state --state NEW" - what is this for? Nat table only sees packets
initiating connection, isn't it?

> # UDP port redirect - not going through
> 
> iptables -t nat -A PREROUTING -i <ext_if> -p udp -d <ext_ip> --dport 22 -j
> DNAT -m state --state NEW --to <int_ip>:1194
> iptables -A FORWARD -i <ext_if> -p udp -d <int_ip> --dport 1194 -m state
> --state NEW -j ACCEPT

You accepting NEW packets in filter table, consider make sure rest would
pass through.

> I hit the nat/prerouting rule, but never reach the filter/forward one.
> As you can see the only change I've made from the tcp rule to udp rule, is
> just the matching protocol.
> I can debug it a little more, but also would like to hear from you guys if
> you have any hints.

Also, I've experiensed situation for UDP when nat rules doesn't match because
there was such connection before the rule inserted and conntrack already saw
it and has it counted. UDP connection tracking (since it's a connectionless
protocol) goes by src/dst ports. Packets can belong to different
"connections". The solution for me was to stop UDP connection for several
minutes to make conntrack forget it and then try again. 

> iptables v1.3.8
> 2.6.16.36-default
> 
> Thanks !
> 
> Thiago.
> 
> 
> 
-- 
Покотиленко Костик <casper@meteor.dp.ua>



^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: UDP port redirect
@ 2007-08-01 12:52 Thiago Lucas
  0 siblings, 0 replies; 5+ messages in thread
From: Thiago Lucas @ 2007-08-01 12:52 UTC (permalink / raw)
  To: netfilter

Покотиленко Костик <casper@meteor.dp.ua> gravou em 01/08/2007 04:05:05:

> В Вто, 31/07/2007 в 20:04 -0300, thiago@powers.com.br пишет:
> > Hello all,
> > 
> > I got a problem when redirecting a UDP port. The rules are:
> > 
> > # TCP port redirect - working fine:
> > 
> > iptables -t nat -A PREROUTING -i <ext_if> -p tcp -d <ext_ip> --dport 
22 -j
> > DNAT -m state --state NEW --to <int_ip>:1194
> > iptables -A FORWARD -i <ext_if> -p tcp -d <int_ip> --dport 1194 -m 
state
> > --state NEW -j ACCEPT
> 
> "-m state --state NEW" - what is this for? Nat table only sees packets
> initiating connection, isn't it?

You got it right, there's no need for that. I made that change in a 
previous search & replace.. forget about it.


> 
> > # UDP port redirect - not going through
> > 
> > iptables -t nat -A PREROUTING -i <ext_if> -p udp -d <ext_ip> --dport 
22 -j
> > DNAT -m state --state NEW --to <int_ip>:1194
> > iptables -A FORWARD -i <ext_if> -p udp -d <int_ip> --dport 1194 -m 
state
> > --state NEW -j ACCEPT
> 
> You accepting NEW packets in filter table, consider make sure rest would
> pass through.

Good remind, but it is stateful, for sure.

> 
> > I hit the nat/prerouting rule, but never reach the filter/forward one.
> > As you can see the only change I've made from the tcp rule to udp 
rule, is
> > just the matching protocol.
> > I can debug it a little more, but also would like to hear from you 
guys if
> > you have any hints.
> 
> Also, I've experiensed situation for UDP when nat rules doesn't match 
because
> there was such connection before the rule inserted and conntrack already 
saw
> it and has it counted. UDP connection tracking (since it's a 
connectionless
> protocol) goes by src/dst ports. Packets can belong to different
> "connections". The solution for me was to stop UDP connection for 
several
> minutes to make conntrack forget it and then try again. 

Had the same (not pleasant) experience with that before, too. Conntrack 
tunables in /proc/sys/net/ipv4/netfilter/ helped me a lot.


Thanks anyway !


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: UDP port redirect
@ 2007-08-01 12:52 Thiago Lucas
  0 siblings, 0 replies; 5+ messages in thread
From: Thiago Lucas @ 2007-08-01 12:52 UTC (permalink / raw)
  To: netfilter

Hello Martijn,


Martijn Lievaart <m@rtij.nl> gravou em 01/08/2007 03:07:23:

> Not sure why this doesn't work, but you don't need the state match in 
> the NAT rule.

That state match in nat/prerouting, my mistake.. it shouldn't be there. 
But I don't believe that was the problem, as it just does nothing..

> iptables -t nat -A PREROUTING -i <ext_if> -p udp -d <ext_ip> --dport
> 22 -j DNAT  --to <int_ip>:1194
> iptables -A FORWARD -i <ext_if> -p udp -d <int_ip> --dport 1194 -m 
> state --state NEW -j ACCEPT
> 
> should work.

It should ! :-)

> 
> You may want to add an explicit LOG rule:
> 
> iptables -A FORWARD -i <ext_if> -p udp -d <int_ip> --dport 1194 -j 
> LOG --log-prefix "WRONG: "
> 
> or even
> 
> iptables -A FORWARD -p udp --dport 1194 -j LOG --log-prefix "WRONG: "


The connection never goes through :/

fw:/etc/iptables # iptables -t nat -L PREROUTING -n -v | grep -E 
'udp.*22.*1194'
    1    70 DNAT       udp  --  eth0   *       0.0.0.0/0 <ext_ip> udp 
dpt:22 to:192.168.10.254:1194 

fw:/etc/iptables # iptables -L FORWARD -n -v | grep -E 'LOG.*udp.*1194'
    0     0 LOG        udp  --  eth0   *       0.0.0.0/0 192.168.10.254  
udp dpt:1194 LOG flags 0 level 4 prefix `WRONG: ' 

> 
> 
> after the ACCEPT rule to debug this.
> 
> M4
> 
> 



^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2007-08-01 12:52 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-07-31 23:04 UDP port redirect thiago
2007-08-01  6:07 ` Martijn Lievaart
2007-08-01  7:05 ` Покотиленко Костик
  -- strict thread matches above, loose matches on Subject: below --
2007-08-01 12:52 Thiago Lucas
2007-08-01 12:52 Thiago Lucas

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.