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
next 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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox