「Netctl」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
(カテゴリ変更)
(校正(でき・出来))
 
(3人の利用者による、間の4版が非表示)
10行目: 10行目:
 
[[zh-hans:Netctl]]
 
[[zh-hans:Netctl]]
 
{{Related articles start}}
 
{{Related articles start}}
{{Related|ネットワーク設定}}
 
{{Related|ワイヤレス設定}}
 
{{Related|NetworkManager}}
 
{{Related|Wicd}}
 
 
{{Related|netctl でブリッジ接続}}
 
{{Related|netctl でブリッジ接続}}
  +
{{Related|NetworkManager}}
  +
{{Related|ワイヤレスネットワーク設定}}
 
{{Related articles end}}
 
{{Related articles end}}
 
''netctl'' はプロファイルを使ってネットワーク接続を管理・設定する CLI ベースのツールです。netctl は古い ''netcfg'' ユーティリティを置き換える新しい Arch Linux の独自プロジェクトです。
 
''netctl'' はプロファイルを使ってネットワーク接続を管理・設定する CLI ベースのツールです。netctl は古い ''netcfg'' ユーティリティを置き換える新しい Arch Linux の独自プロジェクトです。
65行目: 63行目:
 
===自動操作===
 
===自動操作===
   
プロファイルを一つのインターフェイスに一つしか使わなかったり、手動でプロファイルを切り替える場合、[[#基本的な方法|基本的な方法]]を使って下さい。一般的な例として、サーバー・ワークステーション・ルーターなどがあります。
+
プロファイルを(一つのインターフェイスに)一つしか使わなかったり、手動でプロファイルを切り替える場合、[[#基本的な方法|基本的な方法]]を使って下さい。一般的な例として、サーバー・ワークステーション・ルーターなどがあります。
   
 
頻繁に複数のプロファイルを切り替える必要がある時は、[[#プロファイルの自動切り替え|プロファイルの自動切り替え]]を使って下さい。一般的な例として、ラップトップがあります。
 
頻繁に複数のプロファイルを切り替える必要がある時は、[[#プロファイルの自動切り替え|プロファイルの自動切り替え]]を使って下さい。一般的な例として、ラップトップがあります。
95行目: 93行目:
   
 
まず必要なパッケージを[[インストール]]してください:
 
まず必要なパッケージを[[インストール]]してください:
* {{ic|netctl-auto@''interface''.service}} を使うには {{Pkg|wpa_actiond}} パッケージが必要です。
+
* {{ic|netctl-auto@''interface''.service}} を使うには {{AUR|wpa_actiond}} パッケージが必要です。
 
* {{ic|netctl-ifplugd@''interface''.service}} を使うには {{Pkg|ifplugd}} パッケージが必要です。
 
* {{ic|netctl-ifplugd@''interface''.service}} を使うには {{Pkg|ifplugd}} パッケージが必要です。
   
102行目: 100行目:
 
{{ic|netctl-auto@''interface''.service}} によって無線プロファイルが自動的に起動'''しない'''ようにしたい場合は、そのプロファイルに {{ic|1=ExcludeAuto=yes}} を加える必要があります。また、{{ic|1=Priority=}} を使うことで複数のプロファイルが利用可能な場合に、どのプロファイルを優先的に使うか設定できます。{{ic|netctl-ifplugd@''interface''.service}} は [[Wikipedia:ja:DHCP|DHCP]] を使うプロファイルを優先します。固定 IP のプロファイルを優先させるために、{{ic|1=AutoWired=yes}} を使うことができます。詳しくは {{ic|netctl.profile(5)}} を見て下さい。
 
{{ic|netctl-auto@''interface''.service}} によって無線プロファイルが自動的に起動'''しない'''ようにしたい場合は、そのプロファイルに {{ic|1=ExcludeAuto=yes}} を加える必要があります。また、{{ic|1=Priority=}} を使うことで複数のプロファイルが利用可能な場合に、どのプロファイルを優先的に使うか設定できます。{{ic|netctl-ifplugd@''interface''.service}} は [[Wikipedia:ja:DHCP|DHCP]] を使うプロファイルを優先します。固定 IP のプロファイルを優先させるために、{{ic|1=AutoWired=yes}} を使うことができます。詳しくは {{ic|netctl.profile(5)}} を見て下さい。
   
{{Warning|''netctl-auto'' による WPA のプロファイルの自動選択は {{ic|1=Security=wpa-config}} オプションでは出来ません、代わりに {{ic|1=Security=wpa-configsection}} を使って下さい。}}
+
{{Warning|''netctl-auto'' による WPA のプロファイルの自動選択は {{ic|1=Security=wpa-config}} オプションではできません、代わりに {{ic|1=Security=wpa-configsection}} を使って下さい。}}
   
 
プロファイルを設定して、動作するのを確認したら、''systemctl'' を使ってサービスを有効にしてください:
 
プロファイルを設定して、動作するのを確認したら、''systemctl'' を使ってサービスを有効にしてください:
475行目: 473行目:
 
=== netctl-auto で自動的にワイヤレスカードのブロックを解除してインターフェイスを使うことができない ===
 
=== netctl-auto で自動的にワイヤレスカードのブロックを解除してインターフェイスを使うことができない ===
   
多くのノートパソコンにはワイヤレスカードをオフにするハードウェアボタン (あるいはスイッチ) が付いていますが、カードのブロックはカーネルでも行われます。ブロックは [[ワイヤレス設定#Rfkill によるブロック|rfkill]] によって処理されています。
+
多くのノートパソコンにはワイヤレスカードをオフにするハードウェアボタン (あるいはスイッチ) が付いていますが、カードのブロックはカーネルでも行われます。ブロックは [[Rfkill|rfkill]] によって処理されています。
   
 
''netctl-auto'' でワイヤレスカードのブロックを自動的に解除して特定のネットワークに接続したい場合、使用するワイヤレス接続のプロファイルで {{ic|1=RFKill=++auto++}} オプションを設定してください。詳しくは [https://github.com/joukewitteveen/netctl/blob/master/docs/netctl.profile.5.txt netctl.profile(5)] の man ページを参照。
 
''netctl-auto'' でワイヤレスカードのブロックを自動的に解除して特定のネットワークに接続したい場合、使用するワイヤレス接続のプロファイルで {{ic|1=RFKill=++auto++}} オプションを設定してください。詳しくは [https://github.com/joukewitteveen/netctl/blob/master/docs/netctl.profile.5.txt netctl.profile(5)] の man ページを参照。

2024年7月10日 (水) 20:40時点における最新版

関連記事

netctl はプロファイルを使ってネットワーク接続を管理・設定する CLI ベースのツールです。netctl は古い netcfg ユーティリティを置き換える新しい Arch Linux の独自プロジェクトです。

インストール

netctl パッケージが公式リポジトリから利用できます。netctl をインストールすると netcfgAUR が置き換えられます。

netctlnetcfgAUR は衝突するパッケージです。プロファイルが正しく設定されていないと、netctl をインストールした後に接続を失う可能性があります。

ノート: systemctl --type=service を使ってネットワークを設定するサービスが動作していないことを確認するとよいでしょう。ネットワークサービスが複数あると衝突します。

必読

netctl を使う前に以下の man ページを読むのを推奨します:

設定

netctl はプロファイルを使ってネットワーク接続を管理します。様々な動作方法があり、プロファイルを自動的に起動したり、必要に応じて手動で起動することができます。

プロファイルの設定

netctl のプロファイルは /etc/netctl/ に保存されています。ユーザーがネットワーク接続を設定するのを助けるために、設定のサンプルファイルが提供されています。これらのサンプルプロファイルが置かれている場所は /etc/netctl/examples/ です。一般的な設定として以下が用意されています:

  • ethernet-dhcp
  • ethernet-static
  • wireless-wpa
  • wireless-wpa-static

サンプルプロファイルを使うには、プロファイルのどれかを /etc/netctl/examples/ から /etc/netctl/ にコピーしてあなたの設定にあわせてプロファイルを修正して下さい:

# cp /etc/netctl/examples/wireless-wpa /etc/netctl/profile
ノート: ほとんどの場合プロファイルの中のインターフェイス名を編集する必要があるはずです。v197 から、udev は wlanX や ethX という命名形式を使ってネットワークのインターフェイス名を割り当てなくなりました。無線インターフェイスが wlan0 で、有線インターフェイスが eth0 ということはなくなっています。インターフェイスの名前を調べるには ip link コマンドを使って下さい。
ヒント:
  • ワイヤレス設定のために、wifi-menu -o を使ってプロファイルを /etc/netctl/ に生成することができます。
  • ケーブルが接続されているかどうかにかかわらず有線インターフェイスで固定 IP プロファイルを有効にしたい場合は、プロファイルに SkipNoCarrier=yes を使ってください。

プロファイルを作成したら、新しく作ったプロファイルを使って接続を確立するために次を実行して下さい:

# netctl start profile
ノート: profile はファイル名です、フルパスを含みません。フルパスを指定すると netctl はエラーコードを返します。

上のコマンドが失敗する場合、journalctl -xnnetctl status profile を使って失敗の詳細情報を取得して下さい。そして設定を修正してから再テストして下さい。

自動操作

プロファイルを(一つのインターフェイスに)一つしか使わなかったり、手動でプロファイルを切り替える場合、基本的な方法を使って下さい。一般的な例として、サーバー・ワークステーション・ルーターなどがあります。

頻繁に複数のプロファイルを切り替える必要がある時は、プロファイルの自動切り替えを使って下さい。一般的な例として、ラップトップがあります。

基本的な方法

この方法では、インターフェイス毎に一つのプロファイルを固定して起動することができます。最初にプロファイルが問題なく起動することを手動で確認します:

# netctl start profile

それから次のコマンドで enabled にしてください:

# netctl enable profile

このコマンドによって systemd サービスが作成・有効にされ、コンピュータが立ち上がる時にサービスが起動するようになります。ただし、netctl はネットワークインターフェイスデバイスが既に起動している場合 (例えば dhcpcd を使っている場合) はプロファイルを実行しません。

プロファイルへの変更はサービスファイルに自動的には適用されません。変更後、プロファイルを再度有効にする必要があります:

# netctl reenable profile

ブート時 (もしくはサービスの起動時) にプロファイルの起動が成功した時に初めて接続は確立されます。具体的に言うと、有線接続の場合はケーブルが挿さっている必要があり、無線接続の場合、ネットワークが圏内である必要があります。

プロファイルの自動切り替え

netctl は自動でプロファイルを切り替えるために2つの特別な systemd サービスを用意しています:

  • 有線インターフェイス: netctl-ifplugd@interface.service。これを使うと、あなたがケーブルを抜き差しするたびに netctl プロファイルが変更されます。
  • 無線インターフェイス: netctl-auto@interface.service。これを使うと、あなたが特定のネットワークの圏内から他のネットワークの圏内に移動したときに netctl のプロファイルが変更されます。

まず必要なパッケージをインストールしてください:

  • netctl-auto@interface.service を使うには wpa_actiondAUR パッケージが必要です。
  • netctl-ifplugd@interface.service を使うには ifplugd パッケージが必要です。

そして netctl-auto@interface.servicenetctl-ifplugd@interface.service が起動できるプロファイルを全て設定してください。

netctl-auto@interface.service によって無線プロファイルが自動的に起動しないようにしたい場合は、そのプロファイルに ExcludeAuto=yes を加える必要があります。また、Priority= を使うことで複数のプロファイルが利用可能な場合に、どのプロファイルを優先的に使うか設定できます。netctl-ifplugd@interface.serviceDHCP を使うプロファイルを優先します。固定 IP のプロファイルを優先させるために、AutoWired=yes を使うことができます。詳しくは netctl.profile(5) を見て下さい。

警告: netctl-auto による WPA のプロファイルの自動選択は Security=wpa-config オプションではできません、代わりに Security=wpa-configsection を使って下さい。

プロファイルを設定して、動作するのを確認したら、systemctl を使ってサービスを有効にしてください:

# systemctl enable netctl-auto@interface.service 
# systemctl enable netctl-ifplugd@interface.service  
警告:
  • Key= の値が空だったり、プロファイルのどれかにエラーがある場合、このユニットは起動時に "Failed to read or parse configuration '/run/network/wpa_supplicant_wlan0.conf' というメッセージを残して (そのプロファイルが使われていなかったとしても) 失敗します。
  • この方法は基本的な方法と衝突します。以前 netctl でプロファイルを有効にしていたのならば、# netctl disable profile を実行してプロファイルを二重に起動しないようにしてください。

netctl 1.3 から、netctl-auto サービスを止めないで netctl-auto によって管理されているインターフェイスを手動で操作できるようになりました。netctl-auto コマンドを使ってこれを行うことが可能です。利用可能な操作のリストを表示するには次を実行してください:

# netctl-auto --help

サンプルプロファイル

有線

DHCP 接続を使う場合、サンプルプロファイルの /etc/netctl/examples/ethernet-dhcp/etc/netctl にコピーして Interface を設定するだけです。例:

/etc/netctl/my_dhcp_profile
Interface=enp1s0
Connection=ethernet
IP=dhcp

固定 IP 設定を使う場合、サンプルプロファイルの /etc/netctl/examples/ethernet-static/etc/netctl にコピーして Interface, Address, Gateway, DNS を適切に変更してください。例:

/etc/netctl/my_static_profile
Interface=enp1s0
Connection=ethernet
IP=static
Address=('10.1.10.2/24')
Gateway='10.1.10.1'
DNS=('10.1.10.1')

サブネットを指定する /24 に注意してください。255.255.255.0 のネットマスクと同じであり、これがないとプロファイルを起動しません。詳しくは CIDR 表記を参照してください。Address=('10.1.10.2/24' '192.168.1.2/24') と設定することで複数の IP アドレスを NIC にエイリアスできます。

ワイヤレス (WPA-PSK)

ノート: "暗号化"されていたとしても、プロファイルに記述したキーだけで WPA-PSK ネットワークに接続することは可能です。従って、この手順は人間が読めるパスフレーズを隠すことにしか訳に立ちません。ファイルを読める人間がネットワークに接続するのを止めることはできません。どこでも同じパスフレーズを使うというのはセキュリティ的に問題があります、同じパスワードをどこかで使っていないか自問自答するべきでしょう。

パスワードを平文で保存したくない場合、256-bit Encrypted PSK を生成するという方法があります。これはパスフレーズと SSID から標準アルゴリズムを使って計算します。

  • 方法 1: wifi-menu -o を実行して /etc/netctl に設定ファイルを生成する
  • 方法 2: 手順に従って手動設定する

どちらの方法でも、chmod 600 /etc/netctl/<config_file> をしてパスワードにユーザーがアクセスできないようにするのを提案します。

wpa_passphrase を使ってあなたの 256-bit Encrypted PSK を生成してください:

$ wpa_passphrase your_essid passphrase
network={
  ssid="your_essid"
  #psk="passphrase"
  psk=64cf3ced850ecef39197bb7b7b301fc39437a6aa6c6a599d0534b16af578e04a
}
ノート: 表示された情報はプロファイルで使うのでターミナルを閉じないで下さい。

新しいターミナルを開き、サンプルファイル wireless-wpa/etc/netctl/examples から /etc/netctl にコピーしてください。

# cp /etc/netctl/examples/wireless-wpa /etc/netctl/wireless-wpa

それからお好きなテキストエディタを使って /etc/netctl/wireless-wpa を編集する必要があります。先に wpa_passphrase を使って生成された Encrypted Pre-shared Key (psk) をプロファイルの Key 変数に追加してください。

256-bit Encrypted PSK を含むネットワークプロファイル wireless-wpa は以下のようになるはずです:

/etc/netctl/wireless-wpa
Description='A simple WPA encrypted wireless connection using 256-bit Encrypted PSK'
Interface=wlp2s2
Connection=wireless
Security=wpa
IP=dhcp
ESSID=your_essid
Key=\"64cf3ced850ecef39197bb7b7b301fc39437a6aa6c6a599d0534b16af578e04a
ノート:
  • Key 変数には netctl.profile(5) の最後で説明されている special quoting rules を使うようにして下さい。
  • パスフレーズが失敗する場合、Key の中の \" を削除してみてください。

ヒントとテクニック‎

GUI を使う

netctl や接続を管理するのにグラフィカルユーザーインターフェースが欲しい場合、netguiAUR をインストールすることができます。ただし、netgui はまだベータなので問題が起こった時のために基本的な netctl の構文には慣れておいて下さい。

'netcfg current' の代用

以前 netcfg current を使っていた場合は、netctl-auto で起動した接続の代わりとして # netctl-auto current を使うことができます (netctl-1.3 以降の機能)。

接続を手動でパースするには、次を使って下さい:

# netctl list | awk '/*/ {print $2}'

Eduroam

WPA2 Enterprise#netctl を見て下さい。

ボンディング

kernel documentation より:

Linux bonding ドライバは複数のネットワークインターフェースを単一の論理的な「結合された」インターフェースに統合する手段を提供します。結合されたインターフェースの動作はモードに依存します。一般に言われる事ですが、モードはホットスタンバイまたは負荷分散サービスを提供します。加えて、リンクの保全監視が実現されます。

ロードバランシング

netctl とボンディングを使うには、公式リポジトリから追加のパッケージをインストールする必要があります: ifenslave.

/etc/netctl/examples/bonding/etc/netctl/bonding にコピーして、以下のように編集してください:

/etc/netctl/bonding
Description='Bond Interface'
Interface='bond0'
Connection=bond
BindsToInterfaces=('eth0' 'eth1')
IP=dhcp
IP6=stateless

古い設定を無効にして、bonding を自動的に起動するよう設定してください。新しいプロファイルに切り替えるには:

# netctl switch-to bonding
ノート: これは bonding ドライバーのデフォルトであるラウンドロビン方式を使います。詳しくは公式ドキュメントを見て下さい。
ヒント: 状態とボンディングモードを確認するには:
$ cat /proc/net/bonding/bond0

有線から無線へのフェイルオーバー

ここでは有線のイーサネットが切断されたときに無線にフォールバックするボンディングを使用する方法を説明します。有線と無線のインターフェイスがどちらも同じネットワークに接続されるような場合に有用です。無線ルーター/アクセスポイントが bridge モードに設定されている必要があります。

公式リポジトリから以下のパッケージをインストールしてください: ifenslavewpa_supplicant

まずは起動時に bonding モジュールがロードされるように設定します (カーネルモジュール#ロードを参照):

/etc/modules-load.d/bonding.conf
bonding

そして、active-backup を使うように bonding ドライバーのオプションを設定して、primary パラメータを使用したいデバイス (普通は有線インターフェイス) に設定します。また、ip link を実行したときに返されるのと同じデバイス名を使うようにしてください:

/etc/modprobe.d/bonding.conf
options bonding mode=active-backup miimon=100 primary=eth0 max_bonds=0

miimon オプションはリンクが切れたのを検出するために必要です。max_bonds オプションは Interface bond0 already exists エラーを回避します。詳しい情報は カーネルドキュメント を参照してください。

次に、2つのハードウェアインターフェイスを従属させる netctl プロファイルを設定します。使用したい全てのデバイスの名前を使ってください。有線・無線インターフェイスが3つ以上ある場合、全てのインターフェイスを bond インターフェイスに接続させることができます。ただし、大抵の場合は、有線と無線、2つのデバイスだけを使用します:

/etc/netctl/failover
Description='A wired connection with failover to wireless'
Interface='bond0'
Connection=bond
BindsToInterfaces=('eth0' 'wlan0')
IP='dhcp'

前に使っていた他のプロファイル (特に有線や無線のプロファイル) は全て無効化して、起動時に failover プロファイルを有効にするようにしてください:

# netctl enable failover

それから使用したい既知のネットワークに接続できるように wpa_supplicant を設定する必要があります。インターフェイスごとにファイルを作成して systemd で有効化してください。以下の内容でファイルを作成:

/etc/wpa_supplicant/wpa_supplicant-wlan0.conf
ctrl_interface=/run/wpa_supplicant
update_config=1

ファイルの末尾に接続したいネットワークを追加してください:

network={
    ssid="SSID"
    psk=PSK
}

難読化された PSK を生成するには WPA supplicant#wpa_passphrase で接続する のページに書かれているように wpa_passphrase を実行します。

そして、wpa_supplicant@ テンプレートサービスにネットワークインターフェイスを指定して有効化してください。例: wpa_supplicant@wlan0

マシンを再起動して設定が上手く機能するかどうか確認できます。

ノート: ボンディングの起動時に以下のエラーが表示される場合:
wlan0 is up - this may be due to an out of date ifenslave

このエラーは failover netctl プロファイルよりも前に wpa_supplicant が実行されてしまっているのが原因です。特に指定がないかぎり systemd は何もかもを同時に実行してしまうからです。bond0 インターフェイスにボンディングする前に、ifenslave は全てのインターフェイスが立ち上がっていないを要求します。ネットワークをスキャンするためにはインターフェイスが立ち上がっている必要があるため、有線インターフェイスだけがボンディングされることにもなります。

このような場合、wpa_supplicant@wlan0 サービスと netctl@failover の依存関係をカスタマイズする必要があります。特に、netctl プロファイルの後に wpa_supplicant が起動されるようにしなくてはなりません。systemd#依存関係を解決する に書かれているようにして、カスタム依存関係ファイルを作成してください:

/etc/systemd/system/wpa_supplicant@wlan0.service.d/customdependency.conf
[Unit]
After=netctl@failover.service

その後、システムをもう一度再起動して問題ないか確認してください。netctl@failover.service ユニットの journal を確認することでボンディングの状態をチェックできます。インターフェイスを確認:

# ip link

以下のように表示されるはずです:

1: eth0: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master bond0 state UP mode DEFAULT group default qlen 1000
    link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff
2: wlan0: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc mq master bond0 state UP mode DORMANT group default qlen 1000
    link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff
3: bond0: <BROADCAST,MULTICAST,MASTER,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default 
    link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff

巨大なダウンロードをすることで、ファイルオーバーの設定をテストすることができます。ダウンロードの途中に有線インターフェイスを抜いて見て下さい。無線インターフェイスに切り替わってダウンロードが継続するはずです。そして、もう一度有線インターフェイスを接続すると有線でダウンロードが続行されるはずです。netctl@failover.servicewpa_supplicant@wlan0.service ユニットの journal を確認することでデバッグできます。

全てのインターフェイスを使う

ときには、プロファイルでシステム上の全てのインターフェイスを使いたいという場合もあります。例えば、様々なハードウェアの様々なマシンにまたがって共通のディスクイメージを使用するケースです (ヘッドレスサーバーの場合、特にこういうことがあります)。カーネルの命名規則を使って、マシンにイーサネットインターフェイスが一つしかない場合、おそらく適切なインターフェイスは eth0 です。しかしながら、udev の Predictable Network Interface Names を使うとすると、ハードウェアが検出された順番ではなく (例: eth0, eth1)、名前はそれぞれのハードウェアに基づいて命名されます (例: enp1s0)。その場合、マシンによってインターフェイスの名前が変わってしまうため、netctl プロファイルを他のマシンで使うことはできなくなります。

簡単で粗雑な解決方法は /etc/netctl/interfaces/ ディレクトリを利用する方法です。インターフェイスのエイリアス (下記の例では en-any) の名前を決めて、その名前を使ったファイルに以下を記述します (ファイルには実行可能権限を付与してください)。

/etc/netctl/interfaces/en-any
#!/bin/bash
for interface in /sys/class/net/en*; do
        break;
done
Interface=$(basename $interface)
echo "en-any: using interface $Interface";

そしてインターフェイスのエイリアスを使用するプロファイルを作成してください。Interface ディレクティブに特に注意してください。後はサンプルと同じです。

/etc/netctl/wired
Description='Wired'
Interface=en-any
Connection=ethernet
IP=static
Address=('192.168.1.15/24')
Gateway='192.168.1.1'
DNS=('192.168.1.1')

wired プロファイルを起動すると、上記の2つのファイルを使用するマシンは自動的に、udev によって割り当てられた名前は無視して、システムで一番最初に認識されたイーサネットインターフェイスを立ち上げて設定します。インターフェイスの設定としてはあまり信頼性がある方法ではないので注意してください。インターフェイスが複数ある場合、netctl によって全てのインターフェイスに同じインターフェイスが割り当てられ、接続ができなくなってしまう可能性があります。ソリューションが複雑になるのを気にしないときは、netctl-auto のほうが信頼できます。

フックを使う

netctl は /etc/netctl/hooks/ からフックを使うことができ、インターフェイスごとのフックは /etc/netctl/interfaces/ に保存します。フック/インターフェイスではプロファイルで使えるあらゆるオプションが設定できます。プロファイルと同じように読み込まれて、特に重要なのは ExecUpPostExecDownPre です。

プロファイルを読み込むとき、netctl は hooks にある全ての実行可能なスクリプトを読み込んで、それからプロファイルを読み込み接続を行います。そして、最後に interfaces ディレクトリに入っている、使用するインターフェイスと同じ名前の実行可能なスクリプトを読み込みます。そのため、インターフェイススクリプトで定義したオプションはプロファイル (とフック) の宣言を上書きします。

netctl-auto を使用する場合、フックやインターフェイスで使うことができる変数は $INTERFACE, $SSID, $ACTION, $Profile だけです。

サンプル

接続の確立時にコマンドを実行
/etc/netctl/hooks/myservices
#!/bin/sh
ExecUpPost="systemctl start crashplan.service; systemctl start dropbox@<username>.service"
ExecDownPre="systemctl stop crashplan.service; systemctl stop dropbox@<username>.service"
network-online.target の有効化
/etc/netctl/hooks/status
#!/bin/sh
ExecUpPost="systemctl start network-online.target"
ExecDownPre="systemctl stop network-online.target"

このフックを使うことで、ネットワーク接続が必要な systemd サービスを network-online.target の後に起動するように順番を変えることができ、接続が切断される前にサービスが停止されます。

デフォルトの DHCP クライアントの設定

全てのプロファイルで使用する DHCP クライアントを設定・変更するには:

/etc/netctl/hooks/dhcp
#!/bin/sh
DHCPClient='dhclient'

もしくは、以下の行を含んだ実行可能ファイル /etc/netctl/interfaces/<interface> を作成することで、特定のネットワークインターフェイスでクライアントを指定することもできます:

DHCPClient='dhclient'

トラブルシューティング

Job for netctl@wlan(...).service failed

netctl でネットワークに接続するときに、以下のような問題が発生することがあります:

# netctl start wlan0-ssid
Job for netctl@wlan0\x2ssid.service failed. See 'systemctl status netctl@wlan0\x2ssid.service' and 'journalctl -xn' for details.

journalctl -xn を確認して、以下のどちらかを行なって下さい:

1. デバイスが立ち上がっている場合 (上記の場合 wlan0):

network[2322]: The interface of network profile 'wlan0-ssid' is already up

インターフェイスを落とすように設定すれば問題は解決します:

# ip link set wlan0 down

一度落としてから再試行してください:

# netctl start wlan0-ssid

2. インターフェイスが落ちている場合:

dhcpcd[261]: wlan0: ipv4_sendrawpacket: Network is down

dhclient など、別の DHCP クライアントを使えば解決します。クライアントのパッケージをインストールしてから netctl を設定してください:

/etc/netctl/wlan0-ssid
...
DHCPClient='dhclient'

ForceConnect オプションを追加することで解決することもあります:

/etc/netctl/wlan0-ssid

...

ForceConnect=yes

プロファイルを保存したら再度接続を試行してください:

# netctl start wlan0-ssid

dhcpcd: ipv4_addroute: File exists

dhcpcd と netctl を組み合わせた場合、特にスリープしている間にネットワークを切り替えたときに、復帰時にタイムアウトの問題が発生することがあります。netctl は接続が成功したと報告しますがタイムアウトしてしまいます。このような場合、古いデフォルトルートが残存していて新しくなっていません。この問題を回避するにはデフォルトの dhcp クライアントとして dhclient を使うようにしてください。詳しくは こちら を参照。

DHCP がタイムアウトする問題

DHCP でリースを要求するときにタイムアウトの問題が発生する場合、タイムアウトの値を netctl のデフォルト値である30秒よりも高く設定することができます。/etc/netctl/hooks//etc/netctl/interfaces/ にファイルを作成して、ファイルに TimeoutDHCP=40 を追加して実行可能権限を与えればタイムアウト値が40秒になります。

接続がタイムアウトする問題

DHCP と関係ない (固定イーサネット接続などで) タイムアウトの問題が発生したり、プロファイルを起動するときに以下のようなエラーが表示される場合:

# journalctl _SYSTEMD_UNIT=netctl@profile.service
Starting network profile 'profile'...
No connection found on interface 'eth0' (timeout)
Failed to bring the network up for profile 'profile'

プロファイルに TimeoutUp=TimeoutCarrier= を追加して、キャリアタイムアウトとアップタイムアウトの時間を増やしてください:

/etc/netctl/profile
...
TimeoutUp=300
TimeoutCarrier=300

設定を変更したらプロファイルを reenable してください:

# netctl reenable profile

復帰時の netctl-auto の問題

サスペンドからシステムが復帰したときに netctl-auto がときどき再接続に失敗することがあります。一番簡単な解決法は netctl-auto のサービスを再起動することです。以下のようなサービスを作ることで自動で再起動させることができます:

/etc/systemd/system/netctl-auto-resume@.service
[Unit]
Description=restart netctl-auto on resume.
Requisite=netctl-auto@%i.service
After=suspend.target

[Service]
Type=oneshot
ExecStart=/usr/bin/systemctl restart netctl-auto@%i.service

[Install]
WantedBy=suspend.target

ワイヤレスカードでサービスを有効化するには、root で netctl-auto-resume@wlan0.service などを有効化してください。wlan0 は適当なネットワークインターフェイスに置き換えてください。

netctl-auto で突然 WiFi アダプタが動作しなくなる

この問題は最近の wpa_supplicant のアップデートが関連しています (FS#44731 を参照)。ただし回避方法はとても簡単です。/etc/netctl/interfaces にあなたの使っているインターフェイスの名前のファイル (例: wlp3s0) を以下の内容で作成して実行可能属性を付与してください:

/etc/netctl/interfaces/wlp3s0
WPAOptions="-m ''"

その後、netctl-auto サービスを再起動すれば WiFi の自動検出がまた動作するようになります。

netctl-auto で自動的にワイヤレスカードのブロックを解除してインターフェイスを使うことができない

多くのノートパソコンにはワイヤレスカードをオフにするハードウェアボタン (あるいはスイッチ) が付いていますが、カードのブロックはカーネルでも行われます。ブロックは rfkill によって処理されています。

netctl-auto でワイヤレスカードのブロックを自動的に解除して特定のネットワークに接続したい場合、使用するワイヤレス接続のプロファイルで RFKill=++auto++ オプションを設定してください。詳しくは netctl.profile(5) の man ページを参照。

参照