ルーター作り

(2001年8月11日更新)

フレッツADSLで8つのグローバルIPアドレスを使ってネットワークを構築したいと思います。市販のルーターを買わずにPCにGNU/Linux systemをインストールしてそれをルーターにします。

接続図

/etc/sysconfig/network-scripts/ifcfg-eth0にはADSLモデムを接続します。


DEVICE=eth0
ONBOOT=no

/etc/sysconfig/network-scripts/ifcfg-eth1にはHUBを接続します。


DEVICE=eth1
BOOTPROTO=static
BROADCAST=192.168.1.255
IPADDR=192.168.1.1
NETMASK=255.255.255.0
NETWORK=192.168.1.0
ONBOOT=yes

/etc/sysconfig/network-scripts/ifcfg-eth1:0というファイルを作りIPエリアスを行います。


DEVICE=eth1:0
BOOTPROTO=static
BROADCAST=xxx.yyy.zzz.23
IPADDR=xxx.yyy.zzz.17
NETMASK=255.255.255.248
NETWORK=xxx.yyy.zzz.16
ONBOOT=yes

/etc/ppp/optionsでルータに割り当てるIPアドレスを指定します。指定がないと割り当てられるIPアドレスのうち最も小さいアドレスになってしまいます。行の最後に「:」が必要です。


xxx.yyy.zzz.17:

ipchainsを設定するスクリプトです。$safeipはpingを許す外部のIPアドレスです。グローバルIPアドレス発とグローバルIPアドレス着のパケットはforwardを許可します。ローカルIPアドレスから私が所有しないグローバルIPアドレス向けはIPマスカレードします。その他、不要なポートへのinputは認めません。こんな感じで大丈夫だと思うのですが、良いでしょうか?


#!/bin/sh

localhost=127.0.0.1/32
localsubnet=192.168.0.0/24
globalip=xxx.yyy.zzz.16/29
safeip=aaa.bbb.ccc.ddd/ee
portlist="21 22 23 98 110 111 113 119 123 137 138 139 161 194 515 518 901 1178 2010 3128 5680 6000:6010 6667 7000:7010 8080 22273 22289 22305 22321"

/sbin/ipchains -F

/sbin/ipchains -A input -p icmp -s $localhost --icmp-type ping -j ACCEPT
/sbin/ipchains -A input -p icmp -s $localsubnet --icmp-type ping -j ACCEPT
/sbin/ipchains -A input -p icmp -s $globalip --icmp-type ping -j ACCEPT
/sbin/ipchains -A input -p icmp -s ! $safeip --icmp-type ping -j DENY

/sbin/ipchains -P forward DENY
/sbin/ipchains -A forward -p all -b -s $globalip -d 0/0 -j ACCEPT
/sbin/ipchains -A forward -s $localsubnet -d ! $globalip -j MASQ

/sbin/ipchains -A input -p tcp -s 0/0 -d $localhost www -j ACCEPT
/sbin/ipchains -A input -p tcp -s 0/0 -d $localsubnet www -j ACCEPT
/sbin/ipchains -A input -p tcp -s 0/0 -d $globalip www -j ACCEPT
/sbin/ipchains -A input -p tcp -s $localhost -d 0/0 www -j REDIRECT 3128

for i in $portlist
do
  /sbin/ipchains -A input -p tcp -s $localhost -d 0/0 $i -j ACCEPT
  /sbin/ipchains -A input -p tcp -s $globalip -d 0/0 $i -j ACCEPT
  /sbin/ipchains -A input -p tcp -s ! $localsubnet -d 0/0 $i -j DENY
  /sbin/ipchains -A input -p udp -s $localhost -d 0/0 $i -j ACCEPT
  /sbin/ipchains -A input -p udp -s $globalip -d 0/0 $i -j ACCEPT
  /sbin/ipchains -A input -p udp -s ! $localsubnet -d 0/0 $i -j DENY
done

/sbin/ipchains-save > /etc/sysconfig/ipchains

一応これでルーターとして使えています。


戻る