ルーター
この記事ではコンピュータをインターネットゲートウェイ/ルーターに仕立てる方法を解説しています。ゲートウェイはインターネットに直接接続されるため、セキュリティが重要です。外部からアクセスできるサービスを実行するのは好ましくありません。ゲートウェイとして機能するためのサービスだけを実行し、セキュリティ上の穴を作ってしまうおそれがある httpd, ftpd, samba, nfsd などは動かさないようにします。
クロスオーバーケーブルによる PC 間の接続の共有方法については扱っていません。インターネット共有をする方法は、インターネット共有を見て下さい。
目次
ハードウェアの要件
- 最低でも 1GB のディスク容量が必要です。ベースインストールは大体 500MB くらいですが、ウェブキャッシュプロキシなどを使うことを考えて、キャッシュ用に容量を確保しておく方が良いでしょう。
- 最低でも2つの物理的なネットワークインターフェイスが必要です: ゲートウェイは2つのネットワークを相互に接続します (実際には VLAN インターフェイスを使用して1つの物理インターフェイスを VLAN 対応のスイッチに接続して router-on-a-stick 構成にすることもできますが、この記事では説明しません)。ネットワークは物理的に同一のコンピュータに接続する必要があります。インターフェイスの片方は外部のネットワークに接続し、もう片方は内部のネットワークに接続します。
- ハブやスイッチ、UTP ケーブルが必要です: 他のコンピュータをゲートウェイに接続するための機器が必要です。
ネットワークインターフェイスの名称
このガイドでは、混乱を避けるために、わかりやすいインターフェイス名を使用します。
- intern0: LAN に接続されたネットワークカード。実際のコンピュータ上では enp2s0, enp1s1 といった名前が付けられます。
- extern0: 外部ネットワーク (もしくは WAN) に接続されたネットワークカード。enp2s0, enp1s1 といった名前になります。
ネットワークインターフェイスの設定
永続的な命名とインターフェイス名の変更
Systemd は自動的にそれぞれのインターフェイスに一意なインターフェイス名を決めます。決められた名前は永続的で、再起動しても変わることはありません。インターフェイスの名前をユーザーフレンドリーな名前に変更したい場合は、ネットワーク設定#デバイス名を読んで下さい。
IP の設定
netctl を使用
ネットワークインターフェイスを設定する必要があります。一番良い設定方法は netctl プロファイルを使うことです。2つプロファイルを作成してください。
/etc/netctl/extern0-profile
Description='Public Interface.' Interface=extern0 Connection=ethernet IP='dhcp'
/etc/netctl/intern0-profile
Description='Private Interface' Interface=intern0 Connection=ethernet IP='static' Address=('10.0.0.1/24')
次に netctl でインターフェイスをセットアップします:
# netctl enable extern0-profile # netctl enable intern0-profile
systemd-networkd を使用
systemd-networkd を使用すると、ネットワークインターフェイスを簡単に構成できます。
extern0
インターフェイスに DHCP クライアント構成 を適用します。intern0
インターフェイスに 静的 IP 構成 を適用します。
設定の詳細と利用可能なオプションの概要については、systemd-networkd#設定ファイル を参照してください。 networkctl reload
を実行して、設定の変更を適用します。
ADSL 接続/PPPoE
rp-pppoe を使って、ファイアウォールの extern0
インターフェイスに ADSL モデムを接続して Arch で接続を管理することができます。モデムはブリッジモードに設定してください (ハーフブリッジまたは RFC1483)、そうしないとモデムもルーターとして機能してしまいます。rp-pppoe パッケージをインストールしてください。
PPPoE だけを使ってインターネットに接続する場合 (モデムに接続するポート以外に WAN ポートが存在しない場合)、外部の擬似インターフェイスが ppp0 になるので extern0-profile
をセットアップする必要はありません。
PPPoE の設定
netctl を使って pppoe 接続のセットアップができます。コピーして編集してください:
# cp /etc/netctl/examples/pppoe /etc/netctl/
モデムに接続するインターフェイスを選択してください。PPPoE でインターネットに接続するだけなら extern0
になります。後のフィールドは ISP の情報で埋めてください。フィールドの詳細は netctl.profile の man ページの pppoe セクションを参照。
DNS と DHCP
LAN のための DNS と DHCP デーモンとして dnsmasq を使います。dnsmasq は小規模なネットワーク用に設計されています。公式リポジトリから dnsmasq をインストールしてください。
DHCP サーバーにするには以下のように Dnsmasq の設定が必要です:
/etc/dnsmasq.conf
interface=intern0 # make dnsmasq listen for requests only on intern0 (our LAN) expand-hosts # add a domain to simple hostnames in /etc/hosts domain=foo.bar # allow fully qualified domain names for DHCP hosts (needed when # "expand-hosts" is used) dhcp-range=10.0.0.2,10.0.0.255,255.255.255.0,1h # defines a DHCP-range for the LAN: # from 10.0.0.2 to .255 with a subnet mask of 255.255.255.0 and a # DHCP lease of 1 hour (change to your own preferences)
静的な DHCP リースを追加して、LAN 上のコンピュータの MAC アドレスに対して IP アドレスを割り当てることもできます。その場合、コンピュータが新しいリースを要求すると、常に同一の IP が取得されます。DNS レコードを使用するネットワークサーバーで有用です。特定の MAC アドレスから IP を取得できないように設定することもできます。
設定したら dnsmasq.service
を起動・有効化してください。
接続の共有
ネットワークインターフェイスを互いに結びつけます。
iptables
シンプルなステートフルファイアウォールに iptables ファイアウォールと NAT の設定方法がまとまっています。
Dnsmasq を使用する場合、DHCP と Domain の例外をファイアウォールに追加してください:
- ルールの追加:
# iptables -t filter -I INPUT -i intern0 -p udp -m udp --dport 67 -j ACCEPT # iptables -t filter -I INPUT -i intern0 -p tcp -m tcp --dport 67 -j ACCEPT # iptables -t filter -I INPUT -i intern0 -p udp -m udp --dport 53 -j ACCEPT # iptables -t filter -I INPUT -i intern0 -p tcp -m tcp --dport 53 -j ACCEPT
Shorewall
iptables フロントエンドの Shorewall を使うことで簡単に設定できます。詳しくは Shorewall を見てください。
その他の設定
UPnP
shorewall の上記設定に UPnP のサポートは含まれていません。UPnP を使用すると LAN の中からゲートウェイに攻撃を受けた場合に脆弱になるので UPnP の使用は非推奨です。ただし、アプリケーションによっては UPnP が必要となるケースもあります。
ルーターで UPnP を有効にするには、UPnP インターネットゲートウェイデーモン (IGD) をインストールする必要があります。miniupnpd パッケージをインストールしてください。
詳細は Shorewall guide on UPnP を読んで下さい。
リモート管理
OpenSSH を使うことでルーターをリモートで管理することができます。"ヘッドレス" (モニタや入力デバイスを接続しない) に動かしたいときに有用です。
ウェブキャッシュプロキシ
ブラウジングを高速化したりセキュリティを高めるためにウェブプロキシを設定する方法は Squid や Polipo を見て下さい。
時刻サーバー
ルーターを時刻サーバーとして使いたい場合、Network Time Protocol daemon を見て下さい。
時刻サーバーを設定したら、shorewall や iptables の設定を変更して NTP の通信を許可してください。
コンテンツフィルタリング
コンテンツフィルタリングが必要なときは DansGuardian や Privoxy をインストール・設定してください。
トラフィックシェーピング
トラフィックシェーピングは LAN 上に複数のマシンがある場合にとても便利です。トラフィックのタイプにあわせて優先度を割り当てます。インタラクティブなトラフィック (ssh やオンラインゲーム) は高い優先度を必要としますが、P2P のトラフィックは一番優先度が低くても問題ありません。
shorewall
Shorewall#トラフィックシェーピングを読んで下さい。