「ルーター」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
(→‎DNS と DHCP: DHCP サーバの比較表を追加)
(4人の利用者による、間の21版が非表示)
1行目: 1行目:
[[Category:ネットワーク]]
+
[[Category:ネットワーク共有]]
 
[[Category:セキュリティ]]
 
[[Category:セキュリティ]]
  +
[[Category:ファイアウォール]]
 
[[en:Router]]
 
[[en:Router]]
  +
[[zh-hans:Router]]
 
{{Related articles start}}
 
{{Related articles start}}
 
{{Related|シンプルなステートフルファイアウォール}}
 
{{Related|シンプルなステートフルファイアウォール}}
8行目: 10行目:
 
この記事ではコンピュータをインターネットゲートウェイ/ルーターに仕立てる方法を解説しています。ゲートウェイはインターネットに直接接続されるため、''セキュリティ''が重要です。外部からアクセスできるサービスを実行するのは好ましくありません。ゲートウェイとして機能するためのサービスだけを実行し、セキュリティ上の穴を作ってしまうおそれがある httpd, ftpd, samba, nfsd などは動かさないようにします。
 
この記事ではコンピュータをインターネットゲートウェイ/ルーターに仕立てる方法を解説しています。ゲートウェイはインターネットに直接接続されるため、''セキュリティ''が重要です。外部からアクセスできるサービスを実行するのは好ましくありません。ゲートウェイとして機能するためのサービスだけを実行し、セキュリティ上の穴を作ってしまうおそれがある httpd, ftpd, samba, nfsd などは動かさないようにします。
   
クロスオーバーケーブルによる PC 間の接続の共有方法については扱っていません。インターネット共有をする方法は、[[インターネット共有]]を見て下さい。
+
クロスオーバーケーブルによる PC 間の接続の共有方法については扱っていません。インターネット共有をする方法は、[[インターネット共有]] を見て下さい。
  +
  +
{{Note|この記事では、ネットワーク・インタフェースの名前として '''intern0''' と '''extern0''' を使用しています。その理由は、 [[ルーター#永続的な命名とインターフェイス名の変更|永続的な命名とインターフェイス名の変更]] で説明されています。}}
  +
  +
== ハードウェアの要件 ==
   
==ハードウェアの要件==
 
 
* 最低でも 1GB のディスク容量が必要です。ベースインストールは大体 500MB くらいですが、ウェブキャッシュプロキシなどを使うことを考えて、キャッシュ用に容量を確保しておく方が良いでしょう。
 
* 最低でも 1GB のディスク容量が必要です。ベースインストールは大体 500MB くらいですが、ウェブキャッシュプロキシなどを使うことを考えて、キャッシュ用に容量を確保しておく方が良いでしょう。
* 最低でも2つの物理的なネットワークインターフェイスが必要です: ゲートウェイは2つのネットワークを相互に接続します。ネットワークは物理的に同一のコンピュータに接続する必要があります。インターフェイスの片方は外部のネットワークに接続し、もう片方は内部のネットワークに接続します。
+
* 最低でも2つの物理的なネットワークインターフェイスが必要です: ゲートウェイは2つのネットワークを相互に接続します (実際には VLAN インターフェイスを使用して1つの物理インターフェイスを VLAN 対応のスイッチに接続して router-on-a-stick 構成にすることもできますが、この記事では説明しません)。ネットワークは物理的に同一のコンピュータに接続する必要があります。インターフェイスの片方は外部のネットワークに接続し、もう片方は内部のネットワークに接続します。
 
* ハブやスイッチ、UTP ケーブルが必要です: 他のコンピュータをゲートウェイに接続するための機器が必要です。
 
* ハブやスイッチ、UTP ケーブルが必要です: 他のコンピュータをゲートウェイに接続するための機器が必要です。
   
==ネットワークインターフェイスの名称==
+
== ネットワークインターフェイスの設定 ==
Conventions in this guide will be to use non-realistic interface names, to avoid confusion about which interface is which.
 
 
* '''intern0''': the network card connected to the LAN. On an actual computer it will probably have the name enp2s0, enp1s1, etc.
 
* '''extern0''': the network card connected to the external network (or WAN). It will probably have the name enp2s0, enp1s1, etc.
 
   
  +
=== 永続的な命名とインターフェイス名の変更 ===
==インストール==
 
{{Note|完全なインストールガイドは、[[インストールガイド]]を見て下さい。}}
 
   
  +
Systemd は、すべてのインターフェイスに対して、自動的にユニークなインターフェイス名を選択します。これは永続的なもので、リブートしても変わりません。
A fresh install of Arch Linux is the easiest to start from, as no configuration changes have been made and there is a minimal amount of packages installed. This is helpful when attempting to reduce security risk.
 
  +
しかし、接続するネットワークが異なることを強調するために、インターフェースの名前を変更したい場合があります。このガイドの以下のセクションでは、以下の規約を使用します。
   
  +
* '''intern0''':LAN に接続されているネットワークカード。実際のコンピュータでは、enp2s0、enp1s1 などの名前がついているはずです。
===パーティショニング===
 
  +
* '''extern0'': 外部ネットワーク (または WAN) に接続されたネットワークカードです。enp2s0、enp1s1 などの名称を持つことが多いでしょう。
   
  +
デバイスの割り当て名は、[[Systemd-networkd# インターフェイスの名前を変更]] にある [[Systemd-networkd]] を使った設定ファイル、または [[ネットワーク設定#インターフェイス名の変更]] にある [[udev]] ルールで変更することができます。この記事は例が豊富なため、上記のような名前を選択するとよいでしょう。
For security purposes, {{ic|/var}}, {{ic|/tmp}} and {{ic|/home}} should be separate from the {{ic|/}} partition. This prevents disk space from being completely used up by log files, daemons or the unprivileged user. It also allows different mount options for those partitions. If you have already partitioned your drive, the [http://gparted.sourceforge.net/ gparted livecd] can be used to resize, move, or create new partitions.
 
   
  +
=== IP の設定 ===
Your home and root partitions can be much smaller than a regular install since this is not a desktop machine. {{ic|/var}} should be the largest partition—it is where databases, logs and long-term caches are stored. If you have a lot of RAM, mounting {{ic|/tmp}} as {{ic|tmpfs}} is a good idea, so making a disk partition for it during the initial install is unnecessary. Note that {{ic|/tmp}} is mounted as {{ic|tmpfs}} by default in Arch.
 
   
  +
==== netctl を使用 ====
===インストール後の設定===
 
通常ユーザーのアカウントを作成したら [[sudo]] をインストールして [[sudo#root ログインを無効化|root ログインを無効化]]することを推奨します。
 
   
==ネットワークインターフェイス設定==
+
ネットワークインターフェイス設定する必要があります。一番良い設定方法は [[netctl]] プロファイルを使うことです。2つプロファイルを作成してください。
  +
{{Note|PPPoE だけを使ってインターネットに接続する場合は、extern0-profile を設定・有効化する必要はありません。PPPoE の設定は下を見てください。}}
 
===永続的な命名とインターフェイス名の変更===
 
Systemd は自動的にそれぞれのインターフェイスに一意なインターフェイス名を決めます。決められた名前は永続的で、再起動しても変わることはありません。インターフェイスの名前をユーザーフレンドリーな名前に変更したい場合は、[[ネットワーク設定#デバイス名]]を読んで下さい。
 
 
===IP の設定===
 
Now you will need to configure the network interfaces. The best way to do so is using [[netctl]] profiles. You will need to create two profiles.
 
{{Note|If you will be connecting to the Internet only via PPPoE (you have one WAN port) you '''do not need''' to setup or enable the extern0-profile. See below for more information on configuring PPPoE.}}
 
 
* {{ic|/etc/netctl/extern0-profile}}
 
* {{ic|/etc/netctl/extern0-profile}}
 
Description='Public Interface.'
 
Description='Public Interface.'
56行目: 51行目:
 
Address=('10.0.0.1/24')
 
Address=('10.0.0.1/24')
   
  +
{{Note|上記の設定では完全なサブセットを対象としています。一部の人間だけが使えるゲートウェイを構築する場合、CIDR のサフィックスを変更して範囲を狭めることができます。例えば /27 にすると 10.0.0.1 から 10.0.0.30 までが割り当てられます。CIDR の計算機はオンライン上に多数存在します。}}
{{Note|The example configuration above assumes a full subnet. If you are building the gateway for a small amount of people, you will want to change the CIDR suffix to accommodate a smaller range. For example /27 will give you 10.0.0.1 to 10.0.0.30. You can find many CIDR calculators online.}}
 
   
  +
次に netctl でインターフェイスをセットアップします:
Next up is to set up the interfaces with netctl.
 
 
# netctl enable extern0-profile
 
# netctl enable extern0-profile
 
# netctl enable intern0-profile
 
# netctl enable intern0-profile
   
  +
==== systemd-networkd を使用 ====
==ADSL 接続/PPPoE==
 
  +
  +
[[systemd-networkd]] を使用すると、ネットワークインターフェイスを簡単に構成できます。
  +
  +
* {{ic|extern0}} インターフェイスに [[systemd-networkd#有線アダプタで DHCP を使用|DHCP クライアント構成]] を適用します。
  +
* {{ic|intern0}} インターフェイスに [[systemd-networkd#有線アダプタで固定 IP を使用|静的 IP 構成]] を適用します。
  +
  +
設定の詳細と利用可能なオプションの概要については、[[systemd-networkd#設定ファイル]] を参照してください。 {{ic|networkctl reload}} を実行して、設定の変更を適用します。
  +
  +
=== ADSL 接続/PPPoE ===
  +
 
rp-pppoe を使って、ファイアウォールの {{ic|extern0}} インターフェイスに ADSL モデムを接続して Arch で接続を管理することができます。モデムは''ブリッジ''モードに設定してください (ハーフブリッジまたは RFC1483)、そうしないとモデムもルーターとして機能してしまいます。{{pkg|rp-pppoe}} パッケージを[[インストール]]してください。
 
rp-pppoe を使って、ファイアウォールの {{ic|extern0}} インターフェイスに ADSL モデムを接続して Arch で接続を管理することができます。モデムは''ブリッジ''モードに設定してください (ハーフブリッジまたは RFC1483)、そうしないとモデムもルーターとして機能してしまいます。{{pkg|rp-pppoe}} パッケージを[[インストール]]してください。
   
  +
PPPoE だけを使ってインターネットに接続する場合 (モデムに接続するポート以外に WAN ポートが存在しない場合)、外部の擬似インターフェイスが ppp0 になるので {{ic|extern0-profile}} をセットアップする必要はありません。
It should be noted that if you use only PPPoE to connect to the internet (ie. you do not have other WAN port, except for the one that connects to your modem) you do not need to set up the {{ic|extern0-profile}} as the external pseudo-interface will be ppp0.
 
  +
  +
==== PPPoE の設定 ====
  +
  +
netctl を使って pppoe 接続のセットアップができます。コピーして編集してください:
   
===PPPoE の設定===
 
You can use netctl to setup the pppoe connection. To get started
 
 
# cp /etc/netctl/examples/pppoe /etc/netctl/
 
# cp /etc/netctl/examples/pppoe /etc/netctl/
and start editing. For the interface configuration choose the interface that connects to the modem. If you only connect to the internet through PPPoE this will probably be {{ic|extern0}}. Fill in the rest of the fields with your ISP information. See the pppoe section in netctl.profile man page for more information on the fields.
 
   
  +
インターフェイスを選択し、編集を開始します。インターフェイスの設定は、モデムに接続するインターフェイスを選択します。PPPoE でしかインターネットに接続しない場合は、おそらく{{ic|extern0}} になるでしょう。残りのフィールドには、ISP の情報を入力します。フィールドの詳細については、{{man|5|netctl.profile}} man page の PPPoE のセクションを参照してください。
==DNS と DHCP==
 
  +
  +
== DNS と DHCP ==
  +
  +
以下の比較表では、利用可能な DHCP サーバと機能をリストアップしています:
  +
  +
{| class="wikitable"
  +
! サーバ !! DHCPv4 !! DHCPv6 !! IPv6 Router Advertisement !! GUI !! インターフェイス !! ストレージバックエンド !! 備考
  +
|-
  +
| [[dhcpd]] || {{Yes}} || {{Yes}} || {{No}} || [https://github.com/Akkadius/glass-isc-dhcp Glass-ISC-DHCP] || ? || ファイル || Kea に取って代わられました。
  +
|-
  +
| [[dnsmasq]] || {{Yes}} || {{Yes}} || {{Yes}} || {{No}} || ? || ファイル || DNS、PXE、TFTP も。
  +
|-
  +
| {{Pkg|kea}} || {{Yes}} || {{Yes}} || {{No}} || [https://github.com/isc-projects/stork Stork] || REST、RADIUS、NETCONF || ファイル、MySQL、PostgreSQL、Cassandra || DNS も。dhcpd の後継。
  +
|-
  +
| [[systemd-networkd]] || {{Yes}} || {{No|https://github.com/systemd/systemd/issues/16039}} || {{Yes}} || {{No}} || ? || ファイル || Systemd と共にインストールされます。
  +
|}
  +
  +
利用可能な DNS サーバの比較は [[ドメイン名前解決#DNS サーバー]] で見られます。
  +
  +
=== dnsmasq ===
  +
 
LAN のための DNS と DHCP デーモンとして [[dnsmasq]] を使います。dnsmasq は小規模なネットワーク用に設計されています。[[公式リポジトリ]]から {{Pkg|dnsmasq}} を[[pacman|インストール]]してください。
 
LAN のための DNS と DHCP デーモンとして [[dnsmasq]] を使います。dnsmasq は小規模なネットワーク用に設計されています。[[公式リポジトリ]]から {{Pkg|dnsmasq}} を[[pacman|インストール]]してください。
   
  +
DHCP サーバーにするには以下のように Dnsmasq の設定が必要です:
Dnsmasq needs to be configured to be a DHCP server. To do this:
 
   
Edit {{ic|/etc/dnsmasq.conf}}:
+
{{hc|/etc/dnsmasq.conf|<nowiki>
  +
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)</nowiki>}}
   
  +
静的な DHCP リースを追加して、LAN 上のコンピュータの MAC アドレスに対して IP アドレスを割り当てることもできます。その場合、コンピュータが新しいリースを要求すると、常に同一の IP が取得されます。DNS レコードを使用するネットワークサーバーで有用です。特定の MAC アドレスから IP を取得できないように設定することもできます。
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)
 
   
  +
設定したら {{ic|dnsmasq.service}} を[[起動]]・[[有効化]]してください。
Somewhere below, you will notice you can also add "static" DHCP leases, i.e. assign an IP-address to the MAC-address of a computer on the LAN. This way, whenever the computer requests a new lease, it will get the same IP. That is very useful for network servers with a DNS record. You can also deny certain MAC's from obtaining an IP.
 
   
  +
=== systemd-networkd 経由の DHCP ===
Now start dnsmasq:
 
  +
# systemctl start dnsmasq.service
 
  +
DHCP サーバとして [[dnsmasq]] の代わりに [[systemd-networkd]] を使うには、{{ic|[DHCPServer]}} セクションを {{ic|intern0}} インタフェース用の設定ファイルに追加します。利用できるオプションは [[Systemd-networkd#%5BDHCPServer%5D]] を参照してください。
   
 
==接続の共有==
 
==接続の共有==
   
  +
ネットワークインターフェイスを互いに結びつけます。
Time to tie the two network interfaces to each other.
 
===iptables===
 
[[シンプルなステートフルファイアウォール]]に [[iptables]] ファイアウォールと NAT の設定方法がまとまっています。
 
   
  +
=== マニュアル ===
Make sure you added the firewall exceptions for DHCP and Domain, if you want to use Dnsmasq:
 
   
  +
まず、パケットが 1 つのネットワーク インターフェイスから別のネットワーク インターフェイスにホップできるようにする必要があります。 このためには、{{man|8|sysctl}} を介してカーネルでパケット転送を有効にする必要があります。詳細は [[インターネット共有#パケット転送の有効化]] を参照してください。
* Insert Rules:
 
# 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
 
   
  +
{{ic|net.**forwarding}} が正しく設定されている (つまり {{ic|1}}) と仮定して、パケットはまだ適切に送受信される必要があります。そのため、外部に面したネットワークとローカルで使用するサブネットの間で IP アドレスを変換する必要があります。この技術は、"マスカレード" と呼ばれます。また、接続を維持し、LAN から WAN への転送を可能にするために、2つの転送ルールが必要です。このタスクでは、[[iptables]] を使用する予定です。
===Shorewall===
 
Shorewall, an iptables frontend, can be used as an easier alternative. See [[Shorewall]] for detailed configuration.
 
   
  +
{{ic|extern0}} のインターフェースやパッケージを {{ic|intern0}} から {{ic|extern0}} にマスカレードする方法については、[[インターネット共有#NAT の有効化]] の項を参照してください。その後、{{ic|iptables-save -f /etc/iptables/iptables.rules}} で新しく追加したルールを永続化します。詳細は [[iptables#iptables の設定と実行]] を参照してください。
==不要なソフトウェアの削除==
 
   
  +
{{ic|iptables.service}} を [[起動]] して [[有効化]] します。これでルーターは完全に機能し、トラフィックをルーティングできるようになりました。ルーターは公共のインターネットに面しているので、[[シンプルなステートフルファイアウォール]] を使って追加で保護するのが理にかなっています。
Now that the installation has been performed, it is necessary to remove as many packages as possible. Since we are making a gateway, keeping unneeded packages only "bloats" the system, and increases the number of security risks.
 
   
  +
=== systemd-networkd を使用 ===
First, check for obsolete/deprecated packages (likely after a fresh install and massive series of updates):
 
   
  +
以前説明した {{ic|intern0}} のネットワーク設定を、{{ic|1=IPMasquerade=ipv4}} オプションを {{ic|[Network]}} セクションに含むように修正または作成します。この設定により、すべてのインターフェイスでパケット転送が暗黙のうちに有効になります ({{man|5|systemd.network}} を参照してください) 設定例については [[Systemd-networkd#%5BDHCPServer%5D]] を参照してください。
$ pacman -Qm
 
   
  +
=== Shorewall との接続共有 ===
Review the list of explicitly installed packages that are not dependencies and remove any that are unneeded. Having only needed packages installed is an important security consideration.
 
   
  +
iptables フロントエンドの Shorewall を使うことで簡単に設定できます。詳しくは [[Shorewall]] を見てください。
$ pacman -Qet
 
   
  +
== IPv6 のヒント ==
Completely remove the packages you do not need along with their configuration files and dependencies:
 
   
  +
役に立つ読み物: [[IPv6]] と [[wikipedia:ja:IPv6|wikipedia IPv6]]
# pacman -Rsn package1 package2 package3
 
   
  +
=== 一意のローカルアドレス ===
== Logrotate ==
 
   
  +
ISP から IPv6 アドレスを取得していない場合でも、ルーターを IPv6 モードで使用できます。IPv6 を無効にしない限り、すべてのインターフェイスには一意の {{ic|fe80::/10}} アドレスが割り当てられているはずです。
[[logrotate]] の設定を確認して、ログを保存するためのディスク容量が足りなくなってルーターが落ちてしまわないようにしてください。
 
   
  +
内部ネットワーク用には、{{ic|fc00::/7}} ブロックが予約されています。これらのアドレスは一意であることが保証されており、オープンなインターネットからルーティングできないようになっています。{{ic|fc00::/7}} ブロックに属するアドレスは、[[wikipedia:Unique_local_address|Unique Local Addresses]] と呼ばれています。まずは、[https://www.simpledns.com/private-ipv6.aspx ULA/64ブロックを生成する] して、ネットワークで使用します。この例では {{ic|fd00:aaaa:bbbb:cccc::/64}} を使用することにします。まず、内部インターフェイスに静的 IPv6 を割り当てる必要があります。上記で作成した{{ic|intern0-profile}} を修正し、以下の行を追加します
Logrotate はデフォルトでインストールされるため、別個にインストールする必要はありません。
 
   
  +
Address6=('fd00:aaaa:bbbb:cccc::1/64')
==その他の設定==
 
   
  +
これにより、ULA が内部インターフェイスに追加されます。ルーターに関する限り、設定する必要があるのはこれだけです。
===UPnP===
 
The above configuration of shorewall does not include [[Wikipedia:UPnP|UPnP]] support. Use of UPnP is discouraged as it may make the gateway vulnerable to attacks from within the LAN. However, some applications require this to function correctly.
 
   
  +
=== グローバルユニキャストアドレス ===
ルーターで UPnP を有効にするには、UPnP インターネットゲートウェイデーモン (IGD) をインストールする必要があります。[[公式リポジトリ]]から {{Pkg|miniupnpd}} をインストールしてください。
 
  +
  +
ISP または WAN ネットワークが IPv6 インターネットにアクセスできる場合、さらにルーターにグローバルリンクアドレスを割り当て、[[#ルーター広告およびステートレス自動設定 (SLAAC)|SLAAC]] を通じて内部ネットワークに伝播させることができます。グローバルユニキャストプレフィックスは通常、''静的'' か ''プレフィックス委任'' によって提供されます。
  +
  +
==== 静的 IPv6 プレフィックス ====
  +
  +
ISP から静的プレフィックスが提供されている場合は、{{ic|/etc/netctl/extern0-profile}} を編集して、提供された IPv6 と IPv6 プレフィックス (通常は /64) を追加します。
  +
  +
Address6=('2002:1:2:3:4:5:6:7/64')
  +
  +
上記の ULA アドレスに加えて、これを使用できます。
  +
  +
==== DHCPv6-PD による IPv6 プレフィックスの取得 ====
  +
  +
ISP がプレフィックス委譲で IPv6 を扱っている場合は、[[IPv6#プレフィックス委譲 (DHCPv6-PD)]] の指示に従って、ルーターを適切に設定することができます。この記事の規約に従って、WANインターフェースは {{ic|extern0}} です。(PPPoE で接続している場合は{{ic|ppp0}})、LAN インタフェースは {{ic|intern0}} です。
  +
  +
=== ルーター広告およびステートレス自動設定 (SLAAC) ===
  +
  +
ネットワーククライアントに IPv6 を適切に配布するために、広告デーモンを使用する必要があります。{{ic|radvd}} の設定方法は、[[IPv6#ゲートウェイ|IPv6 のメイン記事]] の詳細に従ってください。このガイドの規約では、LAN に面したインターフェイスは {{ic|intern0}} とします。すべてのプレフィックスをアドバタイズするか、ローカルネットワークに割り当てるプレフィックスを選択することができます。
  +
  +
== その他の設定 ==
  +
  +
=== UPnP ===
  +
  +
shorewall の上記設定に [[Wikipedia:UPnP|UPnP]] のサポートは含まれていません。UPnP を使用すると LAN の中からゲートウェイに攻撃を受けた場合に脆弱になるので UPnP の使用は非推奨です。ただし、アプリケーションによっては UPnP が必要となるケースもあります。
  +
  +
ルーターで UPnP を有効にするには、UPnP インターネットゲートウェイデーモン (IGD) をインストールする必要があります。{{Pkg|miniupnpd}} パッケージを[[インストール]]してください。
   
 
詳細は [http://www.shorewall.net/UPnP.html Shorewall guide on UPnP] を読んで下さい。
 
詳細は [http://www.shorewall.net/UPnP.html Shorewall guide on UPnP] を読んで下さい。
146行目: 193行目:
 
=== ウェブキャッシュプロキシ ===
 
=== ウェブキャッシュプロキシ ===
   
ブラウジングを高速化したりセキュリティを高めるためにウェブプロキシを設定する方法 [[Squid]] や [[Polipo]] をさい。
+
ブラウジングを高速化したりセキュリティ追加したりするための Web プロキシのセットアップについて[[Squid]] を参照しください。
   
 
=== 時刻サーバー ===
 
=== 時刻サーバー ===
ルーターを時刻サーバーとして使いたい場合、[[Network Time Protocol daemon]] を見て下さい。
 
   
  +
ルーターをタイムサーバーとして使用するには、利用可能なネットワークタイムプロトコル (NTP) サーバーの実装のために [[システム時刻#時刻同期]] を参照してください。
Then, configure shorewall or iptables to allow NTP traffic in and out.
 
  +
  +
その後、NTP トラフィックの出入りを許可するように shorewall または iptables を設定します。
   
 
=== コンテンツフィルタリング ===
 
=== コンテンツフィルタリング ===
159行目: 207行目:
 
=== トラフィックシェーピング ===
 
=== トラフィックシェーピング ===
   
  +
トラフィックシェーピングは LAN 上に複数のマシンがある場合にとても便利です。トラフィックのタイプにあわせて優先度を割り当てます。インタラクティブなトラフィック (ssh やオンラインゲーム) は高い優先度を必要としますが、P2P のトラフィックは一番優先度が低くても問題ありません。
Traffic shaping is very useful, especially when you are not the only one on the LAN. The idea is to assign a priority to different types of traffic. Interactive traffic (ssh, online gaming) probably needs the highest priority, while P2P traffic can do with the lowest. Then there is everything in between.
 
   
 
==== shorewall によるトラフィックシェーピング ====
 
==== shorewall によるトラフィックシェーピング ====
   
[http://www.shorewall.net/traffic_shaping.htm Shorewall's Traffic Shaping/Control] ガイドを読んで下さい。
+
[[Shorewall#トラフィックシェーピング]] を読んで下さい。
 
Here is my config as an example:
 
* /etc/shorewall/tcdevices : here is where you define the interface you want to have shaped and its rates. I have got a ADSL connection with a 4MBit down/256KBit up profile.
 
ppp0 4mbit 256kbit
 
* /etc/shorewall/tcclasses : here you define the minimum (rate) and maximum (ceil) throughput per class. You will assign each one to a type of traffic to shape.
 
# interactive traffic (ssh)
 
ppp0 1 full full 0
 
# online gaming
 
ppp0 2 full/2 full 5
 
# http
 
ppp0 3 full/4 full 10
 
# rest
 
ppp0 4 full/6 full 15 default
 
* /etc/shorewall/tcrules : this file contains the types of traffic and the class it belongs to.
 
1 0.0.0.0/0 0.0.0.0/0 tcp ssh
 
2 0.0.0.0/0 0.0.0.0/0 udp 27000:28000
 
3 0.0.0.0/0 0.0.0.0/0 tcp http
 
3 0.0.0.0/0 0.0.0.0/0 tcp https
 
I have split it up my traffic in 4 groups:
 
# interactive traffic or ssh: although it takes up almost no bandwidth, it is very annoying if it lags due to leechers on the LAN. This get the highest priority.
 
# online gaming: needless to say you ca not play when your ping sucks. ;)
 
# webtraffic: can be a bit slower
 
# everything else: every sort of download, they are the cause of the lag anyway.
 
   
  +
== 参照 ==
===snort による侵入検知===
 
   
  +
* [[シンプルなステートフルファイアウォール]]
[[Snort]] を見て下さい。
 
  +
* [[インターネット共有]]

2023年10月7日 (土) 16:46時点における版

関連記事

この記事ではコンピュータをインターネットゲートウェイ/ルーターに仕立てる方法を解説しています。ゲートウェイはインターネットに直接接続されるため、セキュリティが重要です。外部からアクセスできるサービスを実行するのは好ましくありません。ゲートウェイとして機能するためのサービスだけを実行し、セキュリティ上の穴を作ってしまうおそれがある httpd, ftpd, samba, nfsd などは動かさないようにします。

クロスオーバーケーブルによる PC 間の接続の共有方法については扱っていません。インターネット共有をする方法は、インターネット共有 を見て下さい。

ノート: この記事では、ネットワーク・インタフェースの名前として intern0extern0 を使用しています。その理由は、 永続的な命名とインターフェイス名の変更 で説明されています。

ハードウェアの要件

  • 最低でも 1GB のディスク容量が必要です。ベースインストールは大体 500MB くらいですが、ウェブキャッシュプロキシなどを使うことを考えて、キャッシュ用に容量を確保しておく方が良いでしょう。
  • 最低でも2つの物理的なネットワークインターフェイスが必要です: ゲートウェイは2つのネットワークを相互に接続します (実際には VLAN インターフェイスを使用して1つの物理インターフェイスを VLAN 対応のスイッチに接続して router-on-a-stick 構成にすることもできますが、この記事では説明しません)。ネットワークは物理的に同一のコンピュータに接続する必要があります。インターフェイスの片方は外部のネットワークに接続し、もう片方は内部のネットワークに接続します。
  • ハブやスイッチ、UTP ケーブルが必要です: 他のコンピュータをゲートウェイに接続するための機器が必要です。

ネットワークインターフェイスの設定

永続的な命名とインターフェイス名の変更

Systemd は、すべてのインターフェイスに対して、自動的にユニークなインターフェイス名を選択します。これは永続的なもので、リブートしても変わりません。 しかし、接続するネットワークが異なることを強調するために、インターフェースの名前を変更したい場合があります。このガイドの以下のセクションでは、以下の規約を使用します。

  • intern0:LAN に接続されているネットワークカード。実際のコンピュータでは、enp2s0、enp1s1 などの名前がついているはずです。
  • 'extern0: 外部ネットワーク (または WAN) に接続されたネットワークカードです。enp2s0、enp1s1 などの名称を持つことが多いでしょう。

デバイスの割り当て名は、Systemd-networkd# インターフェイスの名前を変更 にある Systemd-networkd を使った設定ファイル、または ネットワーク設定#インターフェイス名の変更 にある udev ルールで変更することができます。この記事は例が豊富なため、上記のような名前を選択するとよいでしょう。

IP の設定

netctl を使用

ネットワークインターフェイスを設定する必要があります。一番良い設定方法は netctl プロファイルを使うことです。2つプロファイルを作成してください。

ノート: PPPoE だけを使ってインターネットに接続する場合は、extern0-profile を設定・有効化する必要はありません。PPPoE の設定は下を見てください。
  • /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')
ノート: 上記の設定では完全なサブセットを対象としています。一部の人間だけが使えるゲートウェイを構築する場合、CIDR のサフィックスを変更して範囲を狭めることができます。例えば /27 にすると 10.0.0.1 から 10.0.0.30 までが割り当てられます。CIDR の計算機はオンライン上に多数存在します。

次に netctl でインターフェイスをセットアップします:

# netctl enable extern0-profile
# netctl enable intern0-profile

systemd-networkd を使用

systemd-networkd を使用すると、ネットワークインターフェイスを簡単に構成できます。

設定の詳細と利用可能なオプションの概要については、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(5) man page の PPPoE のセクションを参照してください。

DNS と DHCP

以下の比較表では、利用可能な DHCP サーバと機能をリストアップしています:

サーバ DHCPv4 DHCPv6 IPv6 Router Advertisement GUI インターフェイス ストレージバックエンド 備考
dhcpd Yes Yes No Glass-ISC-DHCP ? ファイル Kea に取って代わられました。
dnsmasq Yes Yes Yes No ? ファイル DNS、PXE、TFTP も。
kea Yes Yes No Stork REST、RADIUS、NETCONF ファイル、MySQL、PostgreSQL、Cassandra DNS も。dhcpd の後継。
systemd-networkd Yes No Yes No ? ファイル Systemd と共にインストールされます。

利用可能な DNS サーバの比較は ドメイン名前解決#DNS サーバー で見られます。

dnsmasq

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起動有効化してください。

systemd-networkd 経由の DHCP

DHCP サーバとして dnsmasq の代わりに systemd-networkd を使うには、[DHCPServer] セクションを intern0 インタフェース用の設定ファイルに追加します。利用できるオプションは Systemd-networkd#[DHCPServer] を参照してください。

接続の共有

ネットワークインターフェイスを互いに結びつけます。

マニュアル

まず、パケットが 1 つのネットワーク インターフェイスから別のネットワーク インターフェイスにホップできるようにする必要があります。 このためには、sysctl(8) を介してカーネルでパケット転送を有効にする必要があります。詳細は インターネット共有#パケット転送の有効化 を参照してください。

net.**forwarding が正しく設定されている (つまり 1) と仮定して、パケットはまだ適切に送受信される必要があります。そのため、外部に面したネットワークとローカルで使用するサブネットの間で IP アドレスを変換する必要があります。この技術は、"マスカレード" と呼ばれます。また、接続を維持し、LAN から WAN への転送を可能にするために、2つの転送ルールが必要です。このタスクでは、iptables を使用する予定です。

extern0 のインターフェースやパッケージを intern0 から extern0 にマスカレードする方法については、インターネット共有#NAT の有効化 の項を参照してください。その後、iptables-save -f /etc/iptables/iptables.rules で新しく追加したルールを永続化します。詳細は iptables#iptables の設定と実行 を参照してください。

iptables.service起動 して 有効化 します。これでルーターは完全に機能し、トラフィックをルーティングできるようになりました。ルーターは公共のインターネットに面しているので、シンプルなステートフルファイアウォール を使って追加で保護するのが理にかなっています。

systemd-networkd を使用

以前説明した intern0 のネットワーク設定を、IPMasquerade=ipv4 オプションを [Network] セクションに含むように修正または作成します。この設定により、すべてのインターフェイスでパケット転送が暗黙のうちに有効になります (systemd.network(5) を参照してください) 設定例については Systemd-networkd#[DHCPServer] を参照してください。

Shorewall との接続共有

iptables フロントエンドの Shorewall を使うことで簡単に設定できます。詳しくは Shorewall を見てください。

IPv6 のヒント

役に立つ読み物: IPv6wikipedia IPv6

一意のローカルアドレス

ISP から IPv6 アドレスを取得していない場合でも、ルーターを IPv6 モードで使用できます。IPv6 を無効にしない限り、すべてのインターフェイスには一意の fe80::/10 アドレスが割り当てられているはずです。

内部ネットワーク用には、fc00::/7 ブロックが予約されています。これらのアドレスは一意であることが保証されており、オープンなインターネットからルーティングできないようになっています。fc00::/7 ブロックに属するアドレスは、Unique Local Addresses と呼ばれています。まずは、ULA/64ブロックを生成する して、ネットワークで使用します。この例では fd00:aaaa:bbbb:cccc::/64 を使用することにします。まず、内部インターフェイスに静的 IPv6 を割り当てる必要があります。上記で作成したintern0-profile を修正し、以下の行を追加します

 Address6=('fd00:aaaa:bbbb:cccc::1/64')

これにより、ULA が内部インターフェイスに追加されます。ルーターに関する限り、設定する必要があるのはこれだけです。

グローバルユニキャストアドレス

ISP または WAN ネットワークが IPv6 インターネットにアクセスできる場合、さらにルーターにグローバルリンクアドレスを割り当て、SLAAC を通じて内部ネットワークに伝播させることができます。グローバルユニキャストプレフィックスは通常、静的プレフィックス委任 によって提供されます。

静的 IPv6 プレフィックス

ISP から静的プレフィックスが提供されている場合は、/etc/netctl/extern0-profile を編集して、提供された IPv6 と IPv6 プレフィックス (通常は /64) を追加します。

 Address6=('2002:1:2:3:4:5:6:7/64')

上記の ULA アドレスに加えて、これを使用できます。

DHCPv6-PD による IPv6 プレフィックスの取得

ISP がプレフィックス委譲で IPv6 を扱っている場合は、IPv6#プレフィックス委譲 (DHCPv6-PD) の指示に従って、ルーターを適切に設定することができます。この記事の規約に従って、WANインターフェースは extern0 です。(PPPoE で接続している場合はppp0)、LAN インタフェースは intern0 です。

ルーター広告およびステートレス自動設定 (SLAAC)

ネットワーククライアントに IPv6 を適切に配布するために、広告デーモンを使用する必要があります。radvd の設定方法は、IPv6 のメイン記事 の詳細に従ってください。このガイドの規約では、LAN に面したインターフェイスは intern0 とします。すべてのプレフィックスをアドバタイズするか、ローカルネットワークに割り当てるプレフィックスを選択することができます。

その他の設定

UPnP

shorewall の上記設定に UPnP のサポートは含まれていません。UPnP を使用すると LAN の中からゲートウェイに攻撃を受けた場合に脆弱になるので UPnP の使用は非推奨です。ただし、アプリケーションによっては UPnP が必要となるケースもあります。

ルーターで UPnP を有効にするには、UPnP インターネットゲートウェイデーモン (IGD) をインストールする必要があります。miniupnpd パッケージをインストールしてください。

詳細は Shorewall guide on UPnP を読んで下さい。

リモート管理

OpenSSH を使うことでルーターをリモートで管理することができます。"ヘッドレス" (モニタや入力デバイスを接続しない) に動かしたいときに有用です。

ウェブキャッシュプロキシ

ブラウジングを高速化したり、セキュリティ層を追加したりするための Web プロキシのセットアップについては、Squid を参照してください。

時刻サーバー

ルーターをタイムサーバーとして使用するには、利用可能なネットワークタイムプロトコル (NTP) サーバーの実装のために システム時刻#時刻同期 を参照してください。

その後、NTP トラフィックの出入りを許可するように shorewall または iptables を設定します。

コンテンツフィルタリング

コンテンツフィルタリングが必要なときは DansGuardianPrivoxy をインストール・設定してください。

トラフィックシェーピング

トラフィックシェーピングは LAN 上に複数のマシンがある場合にとても便利です。トラフィックのタイプにあわせて優先度を割り当てます。インタラクティブなトラフィック (ssh やオンラインゲーム) は高い優先度を必要としますが、P2P のトラフィックは一番優先度が低くても問題ありません。

shorewall によるトラフィックシェーピング

Shorewall#トラフィックシェーピング を読んで下さい。

参照