linux をブロードバンドルータにする

※本記事は2000年頃書いた記事です、現在参考になるでしょうか?

はじめに

 最近では ADSL や FTTH の普及もあり自宅サーバを立てている方が沢山いますが、その接続方法は大概、市販のブロードバンドルータを介した接続が多いように思える。実際その方が簡単に初心者でも接続出来てしまうのは確かなことです。

ただし、接続のリンクスピードに制限があったり、フィルタの設定が柔軟に出来ない、ルータそのものを購入する必要がある等の問題もある。

私の場合も ADSL にしたことで市販のルータを購入しようかと思いましたが UNIX や IP の知識を少しでも深めたい思いもあり、今回は今までサーバとして動いていたマシンをルータ兼用にする事とした。市販のルータを買うお金が惜しい訳ではないですが折角 linux 使ってるのですから、これぐらい出来なくては linux 使いとは言えないですよね。某OS のように「クリック、クリック」で設定できても面白くもなんともない。 設定まえに一般的に言うとlinuxをルータにするには当該ホストにネットワークカードを2枚挿して一方をppp0に使い、もう一方をローカルアドレスにするのが一般的の様です。

ネットワークカード2枚挿しの場合

ここで問題が起こりました、実は私の使ってるマシンはノートタイプの VAIO C-1 なんですが PC カードスロットが1つしか付いてません。これでは2枚挿しの方法が使えなくなります。一応 USB が付いてるのですが USB タイプのネットワークカードは使いたくないのです。悩んだあげく出た答えが IP Alias http://www.linux.or.jp/JF/JFdocs/IP-Alias.txt でした。 linux では1つのネットワークデバイスに複数のIPアドレスを割り当てる機能があります。これを使えば出来そうですな。

ネットワークカード1枚挿しの場合

ネットワークの設定

Linux 本体をインストールした際に eth0 は設定してあるはずなので、もう1つのデバイスとしてeth0:1 を設定する。

私の環境では eth0:1 をクライアント側ネットワークアドレスに合わせ 192.168.0.0/24 を利用しています。

/etc/sysconfig/network-scripts/ifcfg-eth0:1

DEVICE=eth0:1
BOOTPROTO=static
ONBOOT=yes
IPADDR=192.168.0.1
NETMASK=255.255.255.0

Network を再起動して $ /sbin/ifconfig すると2つのネットワークデバイスが認識しているのが分かる

eth0 リンク方法:イーサーネット ハードウェアアドレス **:**:**:**:**:**
inetアドレス:192.168.1.2 ブロードキャスト:192.168.1.255 マスク:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RXパケット:2308792 エラー:0 損失:21 オーバラン:0 フレーム:10
TXパケット:2338291 エラー:0 損失:0 オーバラン:0 キャリア:0
衝突(Collisions):0 TXキュー長:100
割り込み:3 ベースアドレス:0x300

eth0:1 リンク方法:イーサーネット ハードウェアアドレス **:**:**:**:**:**
inetアドレス:192.168.0.1 ブロードキャスト:192.168.0.255 マスク:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
割り込み:3 ベースアドレス:0x300

lo リンク方法:ローカルループバック
inetアドレス:127.0.0.1マスク:255.0.0.0
UP LOOPBACK RUNNING MTU:3924 Metric:1
RXパケット:385169 エラー:0 損失:0 オーバラン:0 フレーム:0
TXパケット:385169 エラー:0 損失:0 オーバラン:0 キャリア:0
衝突(Collisions):0 TXキュー長:0

因みに上記では eth0 側のIPアドレスは 192.168.1.2 を設定しているがこれ以外でも構わない。 ADSLモデムの設定画面(ファームUpdate)を見るため 192.168.1.0/24 を利用しています。

ppp,rp-pppoe のインストール & 設定

お使いのディストリビューションに合わせ rpm 等でインストールして下さい。なるべく最新のバージョンをFTPで取得して入れて下さい。

■設定

root になり # adsl-setup で対話形式の設定ができます。自分のISP環境に合わせ設定して下さい。

以下に私の設定例を挙げときます。

設定/etc/ppp/options

lock
noipdefault
holdoff 10
lcp-echo-failure 4
lcp-echo-interval 0
mtu 1454
mru 1454
receive-all
noauth
noaccomp

/etc/ppp/pppoe.conf

ETH='eth0'
# You Are User Id SetUp
USER='*******@ISP-DomainName'
DEMAND=no
DNSTYPE=SPECIFY
USEPEERDNS=no
# You are ISP DNS Server Address SetUp
DNS1=***.***.***.***
DNS2=***.***.***.***
CONNECT_TIMEOUT=30
CONNECT_POLL=2
ACNAME=
SERVICENAME=
PING="."
CF_BASE=`basename $CONFIG`
PIDFILE="/var/run/$CF_BASE-adsl.pid"
SYNCHRONOUS=no
CLAMPMSS=1412
LCP_INTERVAL=20
LCP_FAILURE=3
PPPOE_TIMEOUT=80
FIREWALL=NONE
LINUX_PLUGIN=
PPPOE_EXTRA=""
PPPD_EXTRA=""

/etc/ppp/pap-secrets

※ISP のパスワードが含まれる為、このファイルのオーナを root、パーミッションを0600に設定

# Secrets for authentication using PAP
# client server secret IP addresses
"UserID@ISP-Domain" * "Password" 

/etc/ppp/chap-secrets

※ISP のパスワードが含まれる為、このファイルのオーナを root、パーミッションを0600に設定

# Secrets for authentication using PAP
# client server secret IP addresses
"UserID@ISP-Domain" * "Password"

forward の許可をしてSYN攻撃等からの防御

/etc/sysctl.conf

## Disables packet forwarding
net.ipv4.ip_forward = 1
# Enables source route verification
net.ipv4.conf.all.rp_filter = 1
# Disables automatic defragmentation (needed for masquerading, LVS)
net.ipv4.ip_always_defrag = 1
# Disables the magic-sysrq key
kernel.sysrq = 0
# SYN flood protection (not enabled by default)
net.ipv4.tcp_syncookies = 1

ipchain ルーティングポリシー,IPマスカレードの設定

/etc/sysconfig/ipchains

:input ACCEPT
:forward REJECT
:output ACCEPT
-A forward -b -s 192.168.1.0/24 -d 0/0 -j ACCEPT
-A forward -s 192.168.0.0/24 -d 0/0 -j MASQ

ファイアーウォールの設定

外部からの不正なアクセスや攻撃からサーバを守るため必須です。必ず設定しましょう。 セキュリティ保護を目的にこの部分の設定は非公開とします。参考にしたサイト: http://www.ku3g.org/negi/ 接続が切れてる場合多し

因みに、/etc/ppp/ip-up.local にフィルターの設定を書いておくことで pppd が ip-up した際に自動的に ip-up.local が呼ばれるようになってます。 ip-down.local にも同じ事が言えます。こちらは ip-down が呼ばれると ip-down.local でフィルタを解除する事ができる。つまり adsl-start した際には ip-up.local でフィルタ設定 adsl-stop でフィルタ解除となります。

接続なのだ

一通り設定が終わった所で早速 InterNet に接続してみよう。

  • 接続開始: adsl-start

  • 接続停止: adsl-stop

root になりコンソールから # adsl-start としてみよう。接続できれば Connected 等と表示されます。

/sbin/ifconfig すると次のように ppp0 デバイスが現れるはずです。

eth0 リンク方法:イーサーネット ハードウェアアドレス **:**:**:**:**:**
inetアドレス:192.168.1.2 ブロードキャスト:192.168.1.255 マスク:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RXパケット:2310022 エラー:0 損失:21 オーバラン:0 フレーム:10
TXパケット:2339449 エラー:0 損失:0 オーバラン:0 キャリア:0
衝突(Collisions):0 TXキュー長:100
割り込み:3 ベースアドレス:0x300

eth0:1 リンク方法:イーサーネット ハードウェアアドレス **:**:**:**:**:**
inetアドレス:192.168.0.1 ブロードキャスト:192.168.0.255 マスク:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
割り込み:3 ベースアドレス:0x300

lo リンク方法:ローカルループバック
inetアドレス:127.0.0.1マスク:255.0.0.0
UP LOOPBACK RUNNING MTU:3924 Metric:1
RXパケット:385362 エラー:0 損失:0 オーバラン:0 フレーム:0
TXパケット:385362 エラー:0 損失:0 オーバラン:0 キャリア:0
衝突(Collisions):0 TXキュー長:0

ppp0 リンク方法:Point-to-Pointプロトコル
inetアドレス:***.***.***.*** P-t-P:***.***.***.*** マスク:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1454 Metric:1
RXパケット:101105 エラー:0 損失:0 オーバラン:0 フレーム:0
TXパケット:105657 エラー:0 損失:0 オーバラン:0 キャリア:0
衝突(Collisions):0 TXキュー長:10

確認のため次の項目をチェック

  • linuxサーバからインターネットに接続できるか(w3m 等があれば...)
  • 名前解決は上手くいくか(nslookup www.yahoo.com 等で答えが返ってくればOK)
  • クライアントからインターネットに接続できるか(ブラウザから www.google.com が見えるか)
  • クライアントから ISP の FTP サーバに接続できますか、そして UP,DOWN load できますか

みなさん上手くいきましたか?

created:

Back to top