I am working on a split route and ShoreWall system. I reviewed the
lartc documentation but have a few areas that I still need help on.
Here is my network:
64.xxx.xxx.1/25 66.xxx.xxx.129/26
| |
#################################################
# Eth2 64.xxx.xxx.2 eth0 66.xxx.xxx.130 #
# eth2:1 64.xxx.xxx.3 eth0:1 66.xxx.xxx.131 #
# eth1 192.168.xxx.1
#
#################################################
192.168.xxx.0/24
Here are the rules as referenced from the lartc split route section:
These are added in /etc/iproute2/rt_tables
ip route add 64.xxx.xxx.0/25 dev eth2 src 64.xxx.xxx.2 table T1
ip route add default via 64.xxx.xxx.1 table T1
ip route add 66.xxx.xxx.0/26 dev eth0 src 66.xxx.xxx.130 table T2
ip route add default via 66.xxx.xxx.129 table T2
main routing tables
ip route add 64.xxx.xxx.0/25 dev eth2 src 64.xxx.xxx.2
ip route add 66.xxx.xxx.0/26 dev eth0 src 66.xxx.xxx.130
default route
ip route add default via 64.xxx.xxx.1
routing rules
ip rule add from 64.xxx.xxx.2 table T1
ip rule add from 64.xxx.xxx.130 table T2
ip route add 192.168.122.0/24 dev eth1 table T1
ip route add 66.xxx.xxx.0/26 dev eth0 table T1
ip route add 127.0.0.0/8 dev lo table T1
ip route add 192.168.xxx.0/24 dev eth1 table T2
ip route add 64.xxx.xxx.0/25 dev eth2 table T2
ip route add 127.0.0.0/8 dev lo table T2
I run web servers behind this firewall and will be using split route as
a transition tool from old circuit to new circuits I also may keep eth0
network haven''t decided yet.
Here are my questions:
On each wan interface I am running alias'' as referenced in the above
diagram eth2:1, eth2:2 and so on where do these need to be specified in
my above rule set is there a way to just set the route via interface
instead of specifying each ip?
Do all of the rules in each section above go into rt_tables and if not
where do they go respectively it doesn''t seem to be stated clearly in
the lartc section on split routes?
Is there anything I am missing?
Thanks very much for your help.
Martin A. Brown
2004-Mar-19 04:12 UTC
multiple links and inbound connections split route questions
Hello Thad,
[ I''m sending this to the LARTC list for the benefit of others; Thad
and I
had a few exchanges offlist, but I thought the list might benefit from
this exchange. It''s more on the issue of handling multiple Internet
links for inbound connections. ]
: 64.xxx.xxx.1/25 66.xxx.xxx.129/26
:
: | |
:
: #################################################
: # Eth2 64.xxx.xxx.2 eth0 66.xxx.xxx.130 #
: # eth2:1 64.xxx.xxx.3 eth0:1 66.xxx.xxx.131 #
: # eth1 192.168.xxx.1 #
: #################################################
: |
: 192.168.xxx.0/24
[ lots of other unrelated stuff snipped ]
: Consider also taking advantage of the conntrack match on the PREROUTING
: chain to catch anything with ctorigdst of an IP on link 1 and using
: fwmark (-j MARK --set-mark 1) along with routing based on fwmark.
OK! Here''s what I mean... I''ll assume the following:
internal server: 192.168.122.1 $intserver
external IP T1: 64.81.128.17 $ip_t1
external IP T2: 66.92.124.18 $ip_t2
Assuming that you wish for both of these public IPs to redirect to
internal IP on server 192.168.122.1, here''s what I''d suggest.
Be
forewarned, I have never done this myself before, although I have done
many things very similar. Regardless, you may have a bit of tweaking and
testing to do once you have this basic configuration in place.
- kernel which supports routing by fwmark (CONFIG_IP_ROUTE_FWMARK=y)
(What distribution are you using?)
- completely "normal" main routing table, along with your preferred
default route
- routing table T1 with routes to the internal network, the local
networks, and a default route through provider on T1
- routing table T2 with routes to the internal network, the local
networks, and a default route through provider on T2
- iptables rules as follows:
iptables -t PREROUTING -i $if_t1 -d $ip_t1 -j DNAT --to-dest $intserver
iptables -t PREROUTING -i $if_t2 -d $ip_t2 -j DNAT --to-dest $intserver
- These two rules (above) handle the DNAT to get the packets addressed
correctly for your LAN.
iptables -t nat -I PREROUTING -i $internal -s $intserver \
--match conntrack --ctorigdst $ip_t1 -j MARK --set-mark 1
iptables -t nat -I PREROUTING -i $internal -s $intserver \
--match conntrack --ctorigdst $ip_t2 -j MARK --set-mark 2
- These two rules (above) put a mark (meta-data) on the packet as it
travels through the firewall. Any packet which was originally
destined for $ip_t1 will be marked with fwmark 1. Any packet
originally destined for $ip_t2 will be marked with fwmark 2. Note
that this happens in the PREROUTING table.
- And finally, the magic routing rules:
ip rule add from $intserver fwmark 1 table T1
ip rule add from $intserver fwmark 2 table T2
[ more stuff snipped ]
I am hoping that somebody else on the LARTC list has tried this and lived
through the pitfalls of using conntrack in this fashion--perhaps somebody
can even point out if I''m leading you down the wrong path.
I''ll include some comments below for posterity.....
: These are added in /etc/iproute2/rt_tables
: ip route add 64.xxx.xxx.0/25 dev eth2 src 64.xxx.xxx.2 table T1
: ip route add default via 64.xxx.xxx.1 table T1
: ip route add 66.xxx.xxx.0/26 dev eth0 src 66.xxx.xxx.130 table T2
: ip route add default via 66.xxx.xxx.129 table T2
Actually, /etc/iproute2/rt_tables is not a script which gets excuted, but
rather a mapping of route table names to numbers. It usually looks
something more like this:
#
# reserved values
#
255 local
254 main
253 default
0 unspec
#
# local
#
#1 inr.ruhep
[ snip ]
: routing rules
: ip rule add from 64.xxx.xxx.2 table T1
: ip rule add from 64.xxx.xxx.130 table T2
The second of these rules looks wrong....did you really mean to have that
be 64.xxx.xxx.130? Shouldn''t that have been 66.xxx.xxx.130? Even so,
you
could actually use the following. See also the nano HOWTO for more detail
[0].
[ snip ]
: I run web servers behind this firewall and will be using split route as
: a transition tool from old circuit to new circuits I also may keep eth0
: network haven''t decided yet.
So, if I understand correctly, you want to have the internal webserver(s)
reachable on both T1 links simultaneously. There are two solutions. The
first involves fully separate sets of IPs from inside to outside [1]. The
other option is to take advantage of the iptables conntrack match module.
See a partial example here [2], although any fairly recent iptables will
have conntrack, and you can look at the options and probably figure out
how to make it work.*
: On each wan interface I am running alias'' as referenced in the above
: diagram eth2:1, eth2:2 and so on where do these need to be specified in
: my above rule set is there a way to just set the route via interface
: instead of specifying each ip?
And another note about "aliased interfaces". These don''t
really exist as
far as the kernel is concerned. To see what I mean, simply do the
following:
# ip addr show dev eth2
The "label eth2:1" parameter on addresses other than the first address
are
used for compatibility with ifconfig. See also [3].
[ snip ]
Best of luck,
-Martin
[0] http://www.ssi.bg/~ja/nano.txt
[1] http://linux-ip.net/html/adv-multi-internet.html#adv-multi-internet-inbound
[2] http://mailman.ds9a.nl/pipermail/lartc/2003q2/008173.html
[3] http://linux-ip.net/html/tools-ip-address.html#ex-tools-ip-address-del
* snipped from "/sbin/iptables -m conntrack --help"
conntrack match v1.2.7a options:
[!] --ctstate [INVALID|ESTABLISHED|NEW|RELATED|SNAT|DNAT][,...]
State(s) to match
[!] --ctproto proto Protocol to match; by number or name, eg.
`tcp''
--ctorigsrc [!] address[/mask]
Original source specification
--ctorigdst [!] address[/mask]
Original destination specification
--ctreplsrc [!] address[/mask]
Reply source specification
--ctrepldst [!] address[/mask]
Reply destination specification
[!] --ctstatus [NONE|EXPECTED|SEEN_REPLY|ASSURED][,...]
Status(es) to match
[!] --ctexpire time[:time] Match remaining lifetime in seconds against
value or range of values (inclusive)
--
Martin A. Brown --- SecurePipe, Inc. --- mabrown@securepipe.com
_______________________________________________
LARTC mailing list / LARTC@mailman.ds9a.nl
http://mailman.ds9a.nl/mailman/listinfo/lartc HOWTO: http://lartc.org/
rubens@etica.net
2004-Mar-19 04:26 UTC
Re: multiple links and inbound connections split route questions
> I am hoping that somebody else on the LARTC list has tried this and lived > through the pitfalls of using conntrack in this fashion--perhaps somebody > can even point out if I''m leading you down the wrong path.I''ve used such a setup recently, worked fine and was 95% similar to what you listed. Found it googling around. One pitfall is dual connection protocols like PPTP and active FTP, where the inside server opens a connection back to external client. I suppose that if a helper is available, RELATED will make things work; I solved this by using an IP alias on LAN so connection inbound from one link would go to one IP, the other will go other IP and both are aliased on the same server. The simpler protocols used the fwmark so firewall rules could be made short. Rubens _______________________________________________ LARTC mailing list / LARTC@mailman.ds9a.nl http://mailman.ds9a.nl/mailman/listinfo/lartc HOWTO: http://lartc.org/
Ming-Ching Tiew
2004-Mar-19 07:24 UTC
Re: multiple links and inbound connections split route questions
> > iptables -t nat -I PREROUTING -i $internal -s $intserver \ > --match conntrack --ctorigdst $ip_t1 -j MARK --set-mark 1 > iptables -t nat -I PREROUTING -i $internal -s $intserver \ > --match conntrack --ctorigdst $ip_t2 -j MARK --set-mark 2 > > ip rule add from $intserver fwmark 1 table T1 > ip rule add from $intserver fwmark 2 table T2 > > I am hoping that somebody else on the LARTC list has tried this and lived > through the pitfalls of using conntrack in this fashion--perhaps somebody > can even point out if I''m leading you down the wrong path. >Firstly, those iptables command won''t even work. I suspect you mean iptables -t mangle ( and not -t nat !!!). Secondly, using this method, if it works, I have to do it for every internal server which I have. If I have 10 servers, I will have to execute many of those commands. I saw some earlier post (by Daniel Chemko) which says he has done this using CONNMARK, basically what he did it by doing this :- iptables -t mangle -A PREROUTING -j CONNMARK --restore-mark iptables -t mangle -A PREROUTING -m state --state NEW -i ${OUTSIDE_DEVICE} -j MARK --set-mark 1 iptables -t mangle -A PREROUTING -m state --state NEW -i \${OUTSIDE_DEVICE2} -j MARK --set-mark 2 iptables -t mangle -A PREROUTING -j CONNMARK --save-mark I haven''t got a chance to try all these. But if this is working, it is much cleaner than this approach using fwmark. _______________________________________________ LARTC mailing list / LARTC@mailman.ds9a.nl http://mailman.ds9a.nl/mailman/listinfo/lartc HOWTO: http://lartc.org/
OK I have sufficient evidence now that my split route ( multipath routing ) is causing kernel panic and also frequent connection lost. I have set up the split route according to _______________________________________________ LARTC mailing list / LARTC@mailman.ds9a.nl http://mailman.ds9a.nl/mailman/listinfo/lartc HOWTO: http://lartc.org/