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. --- [EMAIL PROTECTED]
_______________________________________________
LARTC mailing list / [EMAIL PROTECTED]
http://mailman.ds9a.nl/mailman/listinfo/lartc HOWTO: http://lartc.org/