1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<html>
<head>
<META NAME="generator" CONTENT="lgazmail v1.1G.e">
<TITLE>The Answer Guy 36:
Linux as Router and Proxy Server: HOWTO?
</TITLE>
</HEAD><BODY BGCOLOR="#FFFFFF" TEXT="#000000"
LINK="#3366FF" VLINK="#A000A0">
<!-- ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: -->
<H4>"The Linux Gazette...<I>making Linux just a little more fun!</I>"</H4>
<P> <hr> <P>
<!-- ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: -->
<center>
<H1><A NAME="answer">
<img src="../../gx/dennis/qbubble.gif" alt="(?)" border="0" align="middle">
<font color="#B03060">The Answer Guy</font>
<img src="../../gx/dennis/bbubble.gif" alt="(!)" border="0" align="middle">
</A></H1>
<BR>
<H4>By James T. Dennis,
<a href="mailto:answerguy@ssc.com">answerguy@ssc.com</a><BR>
Starshine Technical Services,
<A HREF="http://www.starshine.org/">http://www.starshine.org/</A>
</H4>
</center>
<p><hr><p>
<!-- ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: -->
<!-- begin 21 -->
<H3 align="left"><img src="../../gx/dennis/qbubble.gif" height="50" width="60"
alt="(?) " border="0">
Linux as Router and Proxy Server: HOWTO?
</H3>
<p><strong>From kdeshpande on Sat, 05 Dec 1998
</strong></p>
<!-- ::
Linux as Router and Proxy Server: HOWTO?
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
:: -->
<P><STRONG><IMG SRC="../../gx/dennis/qbub.gif" ALT="(?)"
HEIGHT="28" WIDTH="50" BORDER="0"
>
we want to setup linux server as a proxy server with two ethernet cards.
kindly guide me for installtion process.
</STRONG></P>
<P><STRONG>
i am ms win 95 user and does not know any thing about unix <TT>/</TT> linus
pl. reply on [another mail address].
</STRONG></P>
<P><STRONG>
</STRONG></P>
<BLOCKQUOTE><IMG SRC="../../gx/dennis/bbub.gif" alt="(!)"
HEIGHT="28" WIDTH="50" BORDER="0"
>
You'll want to start with the "Linux Installation and Getting
Started." That's an LDP guide that's often included with
Linux distributions in the <TT>/usr/doc</TT> directory and is
available on-line at any mirror of the LDP. That covers the
basics of Linux (although it is getting a bit long in the tooth).
</BLOCKQUOTE>
<BLOCKQUOTE>
Configuring a proxy server and router is a fairly advanced
process and will involve a considerable understanding
of Unix and of TCP/IP concepts. It sounds like your
skills in English may make some of my explanation inaccessible
to you. Hopefully the guide to routing that I've also
written for this month's LG article (should appear for the
January 1999 issue) will help.
</BLOCKQUOTE>
<BLOCKQUOTE>
There are a couple of other HOW-TO documents written
on using Linux as a "Firewall" (proxies are often a
component in a firewall). Many of these have been
translated into various languages. You'll want to see if
there's one in your native language.
</BLOCKQUOTE>
<BLOCKQUOTE>
Personally I'd suggest that you get a consultant to come
in and configure it for you. That is likely to be far easier
and less of a hassle than trying to do it yourself.
</BLOCKQUOTE>
<BLOCKQUOTE>
Now, with all of those disclaimers out of the way here's
a simple configuration:
</BLOCKQUOTE>
<blockquote><pre>
_________
192.168.1.x -------| proxy |------ the Internet
^^^^^^^^^
</pre></blockquote>
<BLOCKQUOTE>
In order to have a proxy system, you have to have a
"multi-homed host" (a system with two interfaces in it).
</BLOCKQUOTE>
<BLOCKQUOTE>
In this case you've specified that you want to have two
ethernet cards. So, first you install those. Be sure
to set their IRQ's and I/O base address settings to
non-conflicting values. The exact process varies greatly
from one card to another. With the 3c5x9 and 3c900 cards
you use a program to set them (3C5X9CFG.EXE under MS-DOS,
or the appropriate utility that was written for Linux ---
I found a copy at the VAResearch ftp site:
<a href="ftp://ftp.varesearch.com"
>ftp.varesearch.com</a>
under a relatively obvious name).
</BLOCKQUOTE>
<BLOCKQUOTE>
Let's say that you have one of them set to IRQ 10, I/O 300
and the other set to IRQ 11, I/O 330 (make sure that these
don't conflict with any SCSI, sound or other cards that you have
installed). Typically you'll also want to disable any "Plug &
Play" support on your motherboard since these features may
change the settings on your ethernet card while you boot, causing
you no end of consternation later.
</BLOCKQUOTE>
<BLOCKQUOTE>
You'll also have to make sure that the appropriate driver is linked
into your kernel, or that you've built the appropriate modules.
</BLOCKQUOTE>
<BLOCKQUOTE>
It is also common for the Linux kernel to require that you
provide it with a hint that there are multiple ethernet
cards to initialize. You just provide the kernel with a
boot parameter (read the 'bootparam(7)' man page and/or
the "Boot Parameter HOWTO" for details). The HOWTO
has an example at:
</BLOCKQUOTE>
<BLOCKQUOTE>
<BLOCKQUOTE>
<CODE>
<A HREF="http://metalab.unc.edu/LDP/HOWTO/BootPrompt-HOWTO-7.html#ss7.1"
>http://metalab.unc.edu/LDP/HOWTO/BootPrompt-HOWTO-7.html#ss7.1</A>
</CODE> </BLOCKQUOTE> </BLOCKQUOTE>
<BLOCKQUOTE>
... showing the command case using:
</BLOCKQUOTE>
<BLOCKQUOTE> <BLOCKQUOTE> <CODE>
ether=0,0,ether1
</CODE> </BLOCKQUOTE> </BLOCKQUOTE>
<BLOCKQUOTE>
... (no spaces --- and don't change the case of any
letters).
</BLOCKQUOTE>
<BLOCKQUOTE>
This option is passed to the kernel by typing it in at
the LILO boot prompt, or adding an append directive
to your <TT>/etc/lilo.conf</TT> like:
</BLOCKQUOTE>
<BLOCKQUOTE> <BLOCKQUOTE> <CODE>
append="ether=0,0,ether1"
</CODE> </BLOCKQUOTE> </BLOCKQUOTE>
<BLOCKQUOTE>
...(the double quotes are required).
</BLOCKQUOTE>
<BLOCKQUOTE>
This option forces the kernel to look for a second ethernet
adapter (the first ethernet adapter is labelled as '<tt>ether0</tt>'
and will normally be detected automatically). The <tt>0,0</tt>
forces it to search for the IRQ and I/O base addresses
automatically. If that's not successful, or you want to
be conservative, you can just provide the information manually.
</BLOCKQUOTE>
<BLOCKQUOTE>
This is extensively documented in the "Ethernet HOWTO" at:
</BLOCKQUOTE>
<BLOCKQUOTE> <BLOCKQUOTE> <CODE>
<A HREF="http://metalab.unc.edu/LDP/HOWTO/Ethernet-HOWTO-10.html#ss10.1"
>http://metalab.unc.edu/LDP/HOWTO/Ethernet-HOWTO-10.html#ss10.1</A>
</CODE> </BLOCKQUOTE> </BLOCKQUOTE>
<BLOCKQUOTE>
You should see boot time message indicated that the
ethernet cards have been found. You can use the
'dmesg' command to review those after the system is finished
booting and you've logged in.
</BLOCKQUOTE>
<BLOCKQUOTE>
The last step in the hardware/driver layer is to issue
'<tt>ifconfig</tt>' command for each of these interfaces.
</BLOCKQUOTE>
<BLOCKQUOTE>
Let's say your ISP router (cable modem, ISDN or DSL
gizmo, whatever) is using address 172.17.100.1 on
your ethernet (that's a private net address from RFC1918
--- but let's pretend is was your real address).
</BLOCKQUOTE>
<BLOCKQUOTE>
Let's fill in our diagram a bit more:
</BLOCKQUOTE>
<blockquote><pre>
_________ __________
192.168.1.x -------| proxy |------| router | -- Internet
^^^^^^^^^ ^^^^^^^^^^
eth0 eth1 ^-------- 172.17.100.1
192.168.1.1 172.17.100.2
</pre></blockquote>
<BLOCKQUOTE>
Here we see a private network (all of <tt>192.168.1.*</tt>), our
proxy servier with two ethernet interfaces, with <tt>eth0</tt>
on our "inside LAN" (taking up the conventional <tt>.1</tt> address
for a router --- it is the router to the outside/perimeter
segment. <tt>eth1</tt> is the proxy host's interface on the
"perimeter" or "exposed" segment (outside of our LAN).
</BLOCKQUOTE>
<BLOCKQUOTE>
There is a small perimeter segment in this case. In many
organizations it will be populated with web servers, DNS and
mail servers and other systems that are intended to be
publicly visible.
</BLOCKQUOTE>
<BLOCKQUOTE>
Obviously each of the systems that are shown on this
segment (the proxy and the router) need their own IP
address. I've assigned 172...2 to the proxy since I
said that 172...1 was the border router's inside
address. The border router would also have some sort
of link (usually a point-to-point (PPP) link over a
modem, ISDN, frame relay FRAD, CSU/DSU codec, DSL
ATM or other device --- the telephony is not my
specialty they hand me a "black box" and I plug
the wires into the little tabs where they fit).
</BLOCKQUOTE>
<BLOCKQUOTE>
For our example we don't care what the IP addresses
over the PPP link are. all we care about is that
our ISP gets packets to and from the 172...* network or
subnet. They have to have routes to us.
</BLOCKQUOTE>
<BLOCKQUOTE>
This example will work with any subnet mask --- we'll
assume that we have a whole class C range, from <tt>172.17.100.1</tt>
through <tt>172.17.100.254</tt> for simplicity's sake (read all
about subnetting and proxyarp for gory details on those scenarios).
</BLOCKQUOTE>
<BLOCKQUOTE>
So, on our Linux proxy server we use the following commands
to configure our interfaces:
</BLOCKQUOTE>
<BLOCKQUOTE> <BLOCKQUOTE> <CODE>
ifconfig eth0 192.168.1.1 netmask 255.255.255.0
<br>ifconfig eth1 172.17.100.2 netmask 255.255.255.0
</CODE> </BLOCKQUOTE> </BLOCKQUOTE>
<BLOCKQUOTE>
... we could leave the netmask option off the first
command since it will default to this mask due to the
address class. With most modern ISP's we'll have to
use some other netmask for the second case --- unless
we're paying for a whole Class C block. We might need
to anyway (our ISP might have a Class B address block
and be subnetting it into Class C chunks). We'll just
assume that we need it on both of them.
</BLOCKQUOTE>
<BLOCKQUOTE>
We can optionally specify the broadcast addresses for these
--- however it shouldn't be necessary if we're following
normal conventions. It will default to the last valid
number in the address range (<tt>192.168.1.255</tt> for the
first case and <tt>172.17.100.255</tt> in the other).
</BLOCKQUOTE>
<BLOCKQUOTE><ul>
<li>(If we'd had a netmask of 255.255.255.240
in the first case then our broadcast
address would be 172.17.100.15, if our
addresses had been 172...33 and 172...34
with that netmask our broadcast would
have been 172...47 --- again these are
just examples; the explanation is a bit
involved.)
</ul></BLOCKQUOTE>
<BLOCKQUOTE>
So we have IP addresses on each interface. Now
we need routes. In the newer 2.1.x kernels (and presumably
in the 2.2 kernels and later) the '<tt>ifconfig</tt>' operation
automatically results in an addition to the routing table.
This is more like the way Solaris works. Under earlier
kernels you have to add routes with commands like:
</BLOCKQUOTE>
<BLOCKQUOTE> <BLOCKQUOTE> <CODE>
route add -net 192.168.1.0 eth0
<br>route add -net 172.17.100.0 eth1
</CODE> </BLOCKQUOTE> </BLOCKQUOTE>
<BLOCKQUOTE>
... this defines routes to the two local segments
(one on the inside, and one on the outside). Again,
newer kernels may not require this entry.
</BLOCKQUOTE>
<BLOCKQUOTE>
Now, for our proxy to reach the Internet we'll have
to set a "default route" like:
</BLOCKQUOTE>
<BLOCKQUOTE> <BLOCKQUOTE> <CODE>
route add default gw 172.17.100.1
</CODE> </BLOCKQUOTE> </BLOCKQUOTE>
<BLOCKQUOTE>
If we have other networks that must be accessed
through our LAN (something like a <tt>10.*.*.*</tt> network
in the back office or for our server room) we may
also want to add other "static" routes to this
list. Let's say that <tt>192.168.1.17</tt> was a router between
our desktop LAN and our 10-net server segment. We'd
add a command like:
</BLOCKQUOTE>
<BLOCKQUOTE> <BLOCKQUOTE> <CODE>
route add 10.0.0.0 gw 192.168.1.17
</CODE> </BLOCKQUOTE> </BLOCKQUOTE>
<BLOCKQUOTE>
Notice that we are <EM>not</EM> forwarding packets
between our interior LAN and the outside world. If we
did the routers on the Internet will not have any valid
routes back to us (that's what these <tt>192.168.*.*</tt> and
<tt>10.*.*.*</tt> addresses are all about. Read RFC 1918 for
details on that). <tt>172.16.*.*</tt> through <tt>172.31.*.*</tt>
addresses (16 Class B blocks) are also reserved for this use ---
but we're "pretending" that <tt>172.17.100.*</tt> is a "real address"
for these examples.
</BLOCKQUOTE>
<BLOCKQUOTE>
So now we need to enable our interior systems to
access the outside world. We can use IP Masquerading
and/or proxying to accomplish this. Masquerading is
a bit easier than proxying under Linux since the
support is compiled into most kernels.
</BLOCKQUOTE>
<BLOCKQUOTE>
Masquerading is a process by which we make a group
of systems (our internal clients) look like one
very busy system (our proxy). We do this by re-writing
the "source" addresses on each package as we route it
--- and by patching the TCP port numbers.
</BLOCKQUOTE>
<BLOCKQUOTE>
TCP "port" numbers allow a host to determine which
process on a system is to receive a given packet.
This is why two users on one system can telnet to
another system without there being ambiguity.
</BLOCKQUOTE>
<BLOCKQUOTE>
Using masquerading all of the connections that are
being handled at any given modem essentially look
like "processes" or "sockets" on the proxy server.
</BLOCKQUOTE>
<BLOCKQUOTE>
Thus IP masquerading is "network layer proxying."
</BLOCKQUOTE>
<BLOCKQUOTE>
Do do this under Linux 2.0.x and earlier (back to the
1.3.x series) we could simply use a command like:
</BLOCKQUOTE>
<BLOCKQUOTE><BLOCKQUOTE><CODE>
ipfwadm -F -m -a accept -S 192.168.0.0/16 -D 0.0.0.0/0
</CODE></BLOCKQUOTE></BLOCKQUOTE>
<BLOCKQUOTE>
... which adds (<tt>-a</tt>) a masquerading (<tt>-m</tt>)
rule to accept packets from any source address matching
<tt>192.168.*.*</tt> (16 bits of the address are the
"network part" --- that's equivalent to a netmask of
<tt>255.255.0.0</tt>) and whose destination is "anywhere."
This rule must be added to the "forwarding" (<tt>-F</tt>)
set of packet filters.
</BLOCKQUOTE>
<BLOCKQUOTE>
The Linux 2.0.x IP packet filtering subsystem (kernel
features) maintain four sets of rules (tables):
Accounting, Input, Forwarding, Output
</BLOCKQUOTE>
<BLOCKQUOTE>
... we only care about the "forwarding" rule in this case.
</BLOCKQUOTE>
<BLOCKQUOTE>
With all recent Linux kernels we also have to issue
a command like:
</BLOCKQUOTE>
<BLOCKQUOTE> <BLOCKQUOTE> <CODE>
echo 1 > <TT>/proc/sys/net/ipv4/ip_forward</TT>
</CODE> </BLOCKQUOTE> </BLOCKQUOTE>
<BLOCKQUOTE>
... to enable the kernel's forwarding code. These kernels
default to ignoring packets that aren't destined to
them for security reasons (this and a TCP/IP "option"
called "source routing" have been used to trick systems
into providing inappropriate access to systems --- so it is
better for systems to leave these features disabled by
default). Older versions of Unix and Linux were more
"promiscuous" -- they would forward any packet that
"landed on them" so long as the could find a valid route.
</BLOCKQUOTE>
<BLOCKQUOTE>
Lastly we'd just configure our client systems with
IP addresses in the range <tt>192.168.1.2</tt> through 192...254
and cofigure them to treat 192.168.1 as <EM>their</EM> default
route. Packets will get to the proxy from any of these,
be re-written to look like they came from some socket
on the 172...2 interface and forwarded out to the
Internet. Returning packets will come in on the socket
which will provide the kernel with an index into a table
that stores the <tt>192.168.*.*</tt> owner of this connection,
and the return packet will be re-written and forwarded
accordingly (back into the internal network).
</BLOCKQUOTE>
<BLOCKQUOTE>
That's how masquerading works.
</BLOCKQUOTE>
<BLOCKQUOTE>
Applications layer proxying is actually a bit easier than
this. You install packages like SOCKS, Delegate, the FWTK
(firewall toolkit), and a Squid or
<A HREF="http://www.apache.org/">Apache</A> caching web server
unto the proxy system. These listen for connections on the
inside interface (<tt>192.168.1.1</tt>). Proxy aware software (or
users) on the internal system direct their connections to
the proxy server (on port 1080 for SOCKS and Delegate)
and then relay the real destination address and service
to the proxy server. The proxy server, in turn, opens
up its own connection to the intended server, makes the
requests (according to the type of service requested, and
relays the information back to the client).
</BLOCKQUOTE>
<BLOCKQUOTE>
In addition to the basically relaying a good proxy server
can provide caching (some multiple requests for the
same static resource are handled locally --- saving
time and conserving bandwidthy), additional logging
(so big brother can tell who's been bad), and can
enforce various access control policies (no FTP to
popular mirror sites in the middle of the day, all users
must be Kerberos authenticated in order to access
the Internet, whatever).
</BLOCKQUOTE>
<BLOCKQUOTE>
The main disadvantage to applications layer proxying is
that the proxy clients must be "socksified" or proxy
aware. Either that, or with some of them (FWTK and
optionally DeleGate) the user of a normal client
(such as FTP) can manually connect to the proxy server
and use some special command (login sequence) to
provide the proxy with the information about the real
destination and user/account info. (Almost needless
to say that a compromised proxy host is a great
place to put password grabbing trojan horses!)
</BLOCKQUOTE>
<BLOCKQUOTE>
However, one of the major advantages of the proxy
system is that it can support strange protocols
--- like "active FTP" which involves two co-ordinated
IP connections, one outbound control connection and
one inbound data channel. There are other protocols
that connection pass information "in band" and make
masquerading more difficult and sometimes unreliable.
</BLOCKQUOTE>
<BLOCKQUOTE>
It's possible to use both, even concurrently with
just one host acting in both roles.
</BLOCKQUOTE>
<BLOCKQUOTE>
So far my favorite applications proxy package is
"DeleGate" by Yutaka Sato, of the Electrotechnical
Laboratory (ETL) in Japan. You can find it at:
</BLOCKQUOTE>
<BLOCKQUOTE> <BLOCKQUOTE> <CODE>
<A HREF="http://wall.etl.go.jp/delegate">http://wall.etl.go.jp/delegate</A>
</CODE> </BLOCKQUOTE> </BLOCKQUOTE>
<BLOCKQUOTE>
... it's easy to compile and configure and it's
available under a very liberal license (very BSD'ish
but less wordy).
</BLOCKQUOTE>
<BLOCKQUOTE>
DeleGate can be used as a SOCKS compatible server
(i.e. SOCKSified client software will work with
DeleGate); and it can be "manually operated" as
well.
</BLOCKQUOTE>
<BLOCKQUOTE>
My only complaint about DeleGate is that the
English documentation can be a bit sparse (and my
paltry studies of Japanese are nowhere near the task
of reading the native docs).
</BLOCKQUOTE>
<BLOCKQUOTE>
The easiest way to install SOCKS clients on your
Linux systems is to just grab the RPM's from any
<A HREF="http://www.redhat.com/">Red Hat</A> "contrib"
mirror. That's also the easiest
way to install a SOCKS server.
</BLOCKQUOTE>
<BLOCKQUOTE>
To configure the clients for use with the SOCKS5
libraries you have to create a file, <TT>/etc/libsocks5.conf</TT>,
to contain something like:
</BLOCKQUOTE>
<blockquote><pre>socks5 - - - - 192.168.1.1
noproxy - 192.168.1. -
</pre></blockquote>
<BLOCKQUOTE>
... note that the "noproxy" line ends with a "<tt>.</tt>" to
specify that this apples to the whole <tt>192.168.1.*</tt> address range.
</BLOCKQUOTE>
<BLOCKQUOTE>
configuring the socks server you need to create a
file, <TT>/etc/socks5.conf</TT> and put it at least something like:
</BLOCKQUOTE>
<blockquote><pre>route 192.168.1. - eth1
permit - - - - - -
</pre></blockquote>
<BLOCKQUOTE>
... and you might have to change that inferface
for our example (I don't remember but I think it's
"destination addresses and <EM>target</EM> interface).
</BLOCKQUOTE>
<BLOCKQUOTE>
Naturally the docs on these are abysmal. However,
I did eventually get this setup working when I
last tried it.
</BLOCKQUOTE>
<!-- sig -->
<!-- end 21 -->
<!--startcut ======================================================= -->
<P> <hr> <P>
<H5 align="center"><a href="http://www.linuxgazette.com/ssc.copying.html"
>Copyright ©</a> 1999, James T. Dennis
<BR>Published in <I>The Linux Gazette</I> Issue 36 January 1999</H5>
<P> <hr> <P>
<!-- ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: -->
<P align="center">
<table width="98%"><tr valign="center" align="center">
<td rowspan="3" colspan="6"><A HREF="../lg_answer36.html"><IMG
SRC="../../gx/dennis/answernew.gif"
ALT="[ Answer Guy Index ]"></A></td>
<TD><A HREF="./a.html">a</A></TD>
<TD><A HREF="./b.html">b</A></TD>
<TD><A HREF="./c.html">c</A></TD>
<TD><A HREF="./1.html">1</A></TD>
<TD><A HREF="./2.html">2</A></TD>
<TD><A HREF="./3.html">3</A></TD>
<TD><A HREF="./4.html">4</A></TD>
<TD><A HREF="./5.html">5</A></TD>
<TD><A HREF="./6.html">6</A></TD>
<TD><A HREF="./7.html">7</A></TD>
<TD><A HREF="./9.html">9</A></TD>
<TD><A HREF="./10.html">10</A></TD>
<TD><A HREF="./11.html">11</A></TD>
<TD><A HREF="./12.html">12</A></TD>
</tr><tr valign="center" align="center">
<TD><A HREF="./15.html">15</A></TD>
<TD><A HREF="./16.html">16</A></TD>
<TD><A HREF="./18.html">18</A></TD>
<TD><A HREF="./19.html">19</A></TD>
<TD><A HREF="./20.html">20</A></TD>
<TD><A HREF="./21.html">21</A></TD>
<TD><A HREF="./22.html">22</A></TD>
<TD><A HREF="./23.html">23</A></TD>
<TD><A HREF="./24.html">24</A></TD>
<TD><A HREF="./25.html">25</A></TD>
<TD><A HREF="./26.html">26</A></TD>
<TD><A HREF="./27.html">27</A></TD>
<TD><A HREF="./28.html">28</A></TD>
</tr><tr valign="center" align="center">
<TD><A HREF="./29.html">29</A></TD>
<TD><A HREF="./31.html">31</A></TD>
<TD><A HREF="./32.html">32</A></TD>
<TD><A HREF="./33.html">33</A></TD>
<TD><A HREF="./34.html">34</A></TD>
<TD><A HREF="./35.html">35</A></TD>
<TD><A HREF="./36.html">36</A></TD>
<TD><A HREF="./37.html">37</A></TD>
<TD><A HREF="./38.html">38</A></TD>
<TD><A HREF="./39.html">39</A></TD>
<TD><A HREF="./40.html">40</A></TD>
<TD><A HREF="./41.html">41</A></TD>
<TD><A HREF="./42.html">42</A></TD>
<TD><A HREF="./44.html">44</A></TD>
</tr><tr valign="center" align="center">
<TD><A HREF="./45.html">45</A></TD>
<TD><A HREF="./46.html">46</A></TD>
<TD><A HREF="./47.html">47</A></TD>
<TD><A HREF="./48.html">48</A></TD>
<TD><A HREF="./49.html">49</A></TD>
<TD><A HREF="./50.html">50</A></TD>
<TD><A HREF="./51.html">51</A></TD>
<TD><A HREF="./52.html">52</A></TD>
<TD><A HREF="./53.html">53</A></TD>
<TD><A HREF="./54.html">54</A></TD>
<TD><A HREF="./55.html">55</A></TD>
<TD><A HREF="./56.html">56</A></TD>
<TD><A HREF="./57.html">57</A></TD>
<TD><A HREF="./60.html">60</A></TD>
<TD><A HREF="./61.html">61</A></TD>
<TD><A HREF="./62.html">62</A></TD>
<TD><A HREF="./63.html">63</A></TD>
<TD><A HREF="./64.html">64</A></TD>
<TD><A HREF="./65.html">65</A></TD>
<TD><A HREF="./66.html">66</A></TD>
</tr><tr valign="center" align="center">
<TD><A HREF="./67.html">67</A></TD>
<TD><A HREF="./69.html">69</A></TD>
<TD><A HREF="./72.html">72</A></TD>
<TD><A HREF="./76.html">76</A></TD>
<TD><A HREF="./77.html">77</A></TD>
<TD><A HREF="./78.html">78</A></TD>
<TD><A HREF="./79.html">79</A></TD>
<TD><A HREF="./80.html">80</A></TD>
<TD><A HREF="./81.html">81</A></TD>
<TD><A HREF="./82.html">82</A></TD>
<TD><A HREF="./84.html">84</A></TD>
<TD><A HREF="./85.html">85</A></TD>
<TD><A HREF="./86.html">86</A></TD>
<TD><A HREF="./87.html">87</A></TD>
<TD><A HREF="./91.html">91</A></TD>
<TD><A HREF="./94.html">94</A></TD>
<TD><A HREF="./95.html">95</A></TD>
<TD><A HREF="./96.html">96</A></TD>
<TD><A HREF="./97.html">97</A></TD>
<TD><A HREF="./98.html">98</A></TD>
</tr></table>
</P>
<P> <hr> <P>
<!-- ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: -->
<A HREF="../lg_toc36.html"
><IMG SRC="../../gx/indexnew.gif" ALT="[ Table Of Contents ]"></A>
<A HREF="../../index.html"
><IMG SRC="../../gx/homenew.gif" ALT="[ Front Page ]"></A>
<A HREF="../lg_bytes36.html"
><IMG SRC="../../gx/back2.gif" ALT="[ Previous Section ]"></A>
<A HREF="../larriera.html"
><IMG SRC="../../gx/fwd.gif" ALT="[ Next Section ]"></A>
<!-- ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: -->
</BODY></HTML>
<!--endcut ========================================================= -->
|