|
GNU/Linux Desktop Survival Guide
by Graham Williams |
|
|||
IP Forwarding: Home Networks |
Debian Packages: iptables
Consider a home network of GNU/Linux and MS/Windows machines, connected via ethernet. A GNU/Linux machine can connect to the Internet via PPP. We want to provide network access from all machines. We use iptables (for kernel version 2.4).
Suppose modern (
) is the host which will connect to the Internet
using PPP. After installing iptables do the following on
this host which will serve as the Internet gateway:
# iptables --flush # iptables --table nat --flush # iptables --delete-chain # iptables --table nat --delete-chain # iptables --table nat --append POSTROUTING --out-interface ppp0 -j MASQUERADE # iptables --append FORWARD --in-interface eth0 -j ACCEPT |
This clears the rules for filtering and then adds a rule to provide the IP forwarding. Now we need to turn it on for the kernel:
# echo 1 > /proc/sys/net/ipv4/ip_forward |
And that's it! This host, modern (
) will now act as a gateway to
the Internet for your local machines.
There is some setup needed to have this survive a reboot. One approach is to do this through init.d, as explained in Section 35.2. The first step is to create a script file called /etc/init.d/myfirewall containing:
#! /bin/sh
#
# Set up a firewall for IP Masquerading
#
PATH=/bin:/usr/bin:/sbin:/usr/sbin
case "$1" in
start)
echo -n "Starting IP Masquerading: myfirewall"
iptables --flush
iptables --table nat --flush
iptables --delete-chain
iptables --table nat --delete-chain
iptables --table nat --append POSTROUTING --out-interface ppp0 -j MASQUERADE
iptables --append FORWARD --in-interface eth0 -j ACCEPT
echo 1 > /proc/sys/net/ipv4/ip_forward
echo "."
;;
stop)
echo -n "Stopping IP Masquerading: myfirewall"
echo 0 > /proc/sys/net/ipv4/ip_forward
echo "."
;;
reload)
echo "Not implemented."
;;
force-reload|restart)
sh $0 stop
sh $0 start
;;
*)
echo "Usage: /etc/init.d/myfirewall {start|stop|restart|force-reload|reload}"
exit 1
;;
esac
exit 0
|
Then the firewall can be turned on and off with:
$ wajig start myfirewall $ wajig stop myfirewall |
To have it started at boot and stopped at shutdown:
# update-rc.d myfirewall start 40 S . stop 89 0 6 . |
This creates the following links:
/etc/rc0.d/K89myfirewall -> ../init.d/myfirewall /etc/rc6.d/K89myfirewall -> ../init.d/myfirewall /etc/rcS.d/S40myfirewall -> ../init.d/myfirewall |
Another approach is to only turn it on and off as a PPP connection is established. See the scripts in /usr/share/doc/iptables/examples for details.
Now rose (
) and inco (36.50), machines on the local home
network, can have their network interface set up:
iface eth0 inet static
address 192.168.1.2
network 192.168.1.0
netmask 255.255.255.0
gateway 192.168.1.5 (modern)
|