インターネット共有

提供: ArchWiki
移動先: 案内検索

この記事ではあるマシンと他のマシンでインターネット接続を共有する方法を解説します。

要件

  • サーバーとして機能するマシンにはネットワークデバイスを別に設定する必要があります。
  • ネットワークデバイスはインターネットにアクセスするマシンと接続します。一つ、または複数のマシンを使うことができます。複数のマシンとインターネットを共有するにはスイッチが必要です。一つのマシンで共有する場合は、クロスオーバーケーブルで十分です。
ノート: 片方のコンピュータにギガビットイーサネットカードを挿している場合、クロスオーバーケーブルは必要ありません。通常のイーサネットケーブルで動作します。

設定

このセクションでは、クライアントのコンピュータに接続するネットワークデバイスの名前は net0、インターネットに接続するネットワークデバイスの名前は internet0 としています。

ヒント: Udev#固定デバイス名の設定を使ってデバイスの名前は変更することができます。

固定 IP アドレス

他のマシンに接続したインターフェイスに固定 IPv4 アドレスを割り当てます。アドレスの頭3バイトは他のインターフェイスのアドレスの頭3バイトと違っている必要があります。

# ip link set up dev net0
# ip addr add 192.168.123.100/24 dev net0 # arbitrary address

起動時に固定 ip を割り当てたい場合、netctl を使います。

パケット転送の有効化

現在のパケット転送の設定をチェック:

# sysctl -a | grep forward

次のコマンドを実行して一時的にパケット転送を有効化:

# sysctl net.ipv4.ip_forward=1
ヒント: 特定のインターフェイスでのみパケット転送を有効にしたい場合は sysctl net.ipv4.conf.interface_name.forwarding=1 を使ってください。

再起動した後も設定が残るようにするには /etc/sysctl.d/30-ipforward.conf を編集:

/etc/sysctl.d/30-ipforward.conf
net.ipv4.ip_forward=1
net.ipv6.conf.default.forwarding=1
net.ipv6.conf.all.forwarding=1

設定した後は、再起動してから転送が有効になっているか確認するのを推奨します。

ノート: systemd-networkd はバージョン 220/221 から新しいフォワーディングセマンティクスを導入しています [1]。systemd-networkd を使ってネットワークインターフェイスを制御している場合、デフォルトで、systemd-networkd が net.*.ip_forward の設定を上書きして、転送をオフにしてしまいます。systemd-networkd で上記の設定を使うには systemd-networkd のインターフェイス設定ファイルで IPForward=kernel と設定する必要があります (詳しくは man 5 systemd.network を参照)。

NAT の有効化

公式リポジトリから iptables パッケージをインストールしてください。iptables を使って NAT を有効化:

# iptables -t nat -A POSTROUTING -o internet0 -j MASQUERADE
# iptables -A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
# iptables -A FORWARD -i net0 -o internet0 -j ACCEPT
ノート: もちろん、上記は移動体通信でも機能します (ルーティング PC では通常 ppp0 になります)。

詳細は iptables の記事を読んで下さい (特に、ルールの保存と、起動時に自動的にルールを適用させる方法の項)。iptables についてはシンプルなステートフルファイアウォールのページでも詳しい解説をしています。

クライアント PC に IP アドレスを割り当てる

定期的に、複数のマシンで、設定したマシンのインターネット共有を使う場合、dhcp サーバーをインストールすると良いでしょう。

dhcpd の wiki 記事を読んで dhcp サーバーを追加することができます。その後、クライアント pc に dhcpcd クライアントをインストールしてください。

特に定期的に使うというわけではないのであれば、手動でクライアントに ip を追加する方法もあります。

手動で IP を追加

dhcp を使わない場合、クライアント pc で、ip アドレスとデフォルトルートを追加:

# ip addr add 192.168.123.201/24 dev eth0  # arbitrary address, first three blocks must match the address from above
# ip link set up dev eth0
# ip route add default via 192.168.123.100 dev eth0   # same address as in the beginning

全てのクライアントで DNS サーバーを設定してください。詳しくは resolv.conf を参照。

これでクライアント PC はインターネットに接続されるはずです。

トラブルシューティング

PC に接続することはできながら、データを送信することはできない場合 (例えば、クライアント PC がサーバー PC に DHCP リクエストを送った場合、サーバー PC はリクエストを受け取ってクライアントに IP を返すが、クライアントがそれを受け取れずに、タイムアウトしてしまう等)、干渉する Iptables ルールが設定されていないか確認してください。

参照