All of lore.kernel.org
 help / color / mirror / Atom feed
From: Ulysses Almeida <ulysses.almeida@gmail.com>
To: netfilter@lists.netfilter.org
Subject: Two links and a SMTP sever.
Date: Tue, 18 Jan 2005 10:39:04 -0300	[thread overview]
Message-ID: <d645356050118053928226673@mail.gmail.com> (raw)

[-- Attachment #1: Type: text/plain, Size: 773 bytes --]

Hi folks,

  I have an unsolved problem with iptables + iproute2 that I can't
figure out how to solve it.

  I explaint it on the attachment (i sent this attachment, because I
don't thin it will cause any trouble, since it's text/plain, if does,
say and I won't send again). I wrote this as a mini-HowTo, and I
pretend to publish this, but I need to solve the problem before doing
this ;)

  The strange thing. I have almost the same scenario on other host,
What differs is the fact that on the other host I have 4 Internet
links, not only two, and everything works as I expected.  I tried the
same solution on another two hosts, and on both I had this releated
problem.

  If some one can help-me track this problem, I thank in advance.

  Regars.

-- 
 - Ulysses Almeida

[-- Attachment #2: lar_with_smtp.txt --]
[-- Type: text/plain, Size: 4109 bytes --]


  I Have the following scenario:

  - One server with two links:
    * First link has dynamic IP (cheap one)
    * Second links has fixed IP (expensive one)

  - Link(1) is used by my intranet users, they use Internet 
  services by this link. To do this, I just setuped Link(1)
  as my default gw. And made my server a linux router.
    # echo 1 > /proc/sys/net/ipv4/ip_forward
    # iptables -t nat -A POSTROUTING -s <intranet_net> -o <eth_link(1)> -j MASQUERADE 
    # ip route add default via <link(1)_gw> dev <eth_link(1)>

  - Link(2) is used by some incomming requests from internet
  to this server. This services are HTTP and SMTP services. 
  To use second link properly, I setuped iproute2
    # echo 100 link2 >> /etc/iproute2/rt_tables
    # ip route add <intranet_net> dev <eth_intranet> src <server_intranet_ip> table link2
    # ip route add <link(2)_net> dev <eth_link(2)> src <server_link(2)_ip> table link2
    # ip route add default via <link(2)_gw> dev <eth_link(2)> table link2
    # ip rule add from <server_link(2)_ip> lookup link2

 	      ______
             |      |	          __________  
             | S    | Link(1)    /	    \ 
             | E  S |<--------->| 	     |
  ________   | R  M |       	|  INTERNET  |
 |INTRANET|->| V  T | Link(2)   | 	     |
 '--------'  | E  P |<--------->| 	     |
             | R    |	         \__________/
             |______|		       	
  	   			      
  
  
  Almost every thing works at this point. All my intranet users, are 
using Link(1) to navigate on Internet, use MSN/ICQ/Jabber, and etc.
  When someone on Internet want's to access my WEB page, they use 
server_link(2)_ip to get into. The same when they want to accesse their
e-mails. If some MTA on internet, needs to deliver some e-mail to my
smtp server, it also uses the server_link(2)_ip. And it's work fine.

  There's only one problem. If my MTA wants to deliver an e-mail, it
tries it by Link(1), what's reasonable, because that's the server default
gateway. But  it's not good, when the link(1) (dynamic IP) is a black 
listed one

  To solve this problem, let's play with iptables and iproute2 a little more.

  Every outgoing packet, with destination port set to 25, I will mark.
    # iptables -t mangle -A OUTPUT -p tcp --dport 25 -j MARK --set-mark 0x02

  Now I can say to iproute2 use the right routing table.
    # ip rule add fwmark 0x02 lookup link2

  Still not working, if i log outgoing packts, with destination port 25,
I see SMTP packets going through eth_link(2), but with server_link(1)_ip.
Let's handle those packets a little more.
    # iptables -t nat -I POSTROUTING -o <eth_link(2)> -j SNAT --to-source <server_link(2)_ip>

  Yes, now I'm sure every outgoing trafic through eth_link(2) is going
with the correct IP.

  == UNSOLVED PROBLEM ==

  But, argh, it still not working. I tried to track connections:

  # iptables -t mangle -m tcp -I OUTPUT -p tcp --dport 25 -j LOG --log-level 3 --log-prefix 'mangle OUTPUT: '
  # iptables -t nat -m tcp -I POSTROUTING -p tcp --dport 25 -j LOG --log-level 3 --log-prefix 'nat POSTROUTING: 
  # iptables -t mangle -m tcp -I PREROUTING -p tcp --sport 25 -j LOG --log-level 3 --log-prefix 'mangle PREROUTING: '
  # iptables -t nat -m tcp -I PREROUTING -p tcp --sport 25 -j LOG --log-level 3 --log-prefix 'nat PREROUTING: '
  # iptables -t mangle -m tcp -I INPUT -p tcp --sport 25 -j LOG --log-level 3 --log-prefix 'mangle INPUT: '
  # iptables -t filter -m tcp -I INPUT -p tcp --sport 25 -j LOG --log-level 3 --log-prefix 'filter INPUT: '


  To simulate, I started a telnet some_smtp_server 25. I could see:

  - packet on output mangle -> postrouting nat.
  - pachet on prerouting mangle.

  After packet appears on mangle's prerouting, it disappers? I can't
understando why.
  How can I debug this?
  Any one knows what can causinig it?


  I'm using:
# uname -r
2.6.5-63255U10_3cl    (I think is something near 2.6.9, with conectiva patchs)
# iptables -V
iptables v1.2.11
# ip -V  
ip utility, iproute2-ss020116


             reply	other threads:[~2005-01-18 13:39 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2005-01-18 13:39 Ulysses Almeida [this message]
2005-01-18 20:54 ` Two links and a SMTP sever Samuel Jean
2005-01-18 20:52   ` Ulysses Almeida
2005-01-18 21:17     ` Samuel Jean
2005-01-18 21:14       ` Ulysses Almeida
2005-01-18 22:02         ` Samuel Jean
2005-01-19 12:26           ` Ulysses Almeida
2005-01-18 23:28     ` Jason Opperisano
2005-02-07 22:53 ` Ulysses Almeida

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=d645356050118053928226673@mail.gmail.com \
    --to=ulysses.almeida@gmail.com \
    --cc=netfilter@lists.netfilter.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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.