ArchLinux のネットワークの設定に関するページです。

情報:Network configuration - ArchWiki

ネットワークデバイス名

Systemd v197 からネットワークデバイスの命名法が変更され、eth0 とかではなく、enp2s0 などになった。

ip コマンド

ArchLinux では ifconfig コマンドが使えないので、代わりに ip コマンドを用いる。

$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: enp3s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:19:99:xx:xx:xx brd ff:ff:ff:ff:ff:ff
    inet 192.168.xx.xx/24 brd 192.168.xx.255 scope global dynamic enp3s0
       valid_lft 41645sec preferred_lft 41645sec
    inet6 fe80::2xx:xxff:xxxx:xxxx/64 scope link 
       valid_lft forever preferred_lft forever

DHCP

手動で DHCP サーバから IP アドレスを取得するには、dhcpcd コマンドで引数にネットワークインタフェース名を指定する。

# dhcpcd interface名

systemd-networkd

バージョン 209 以上の systemd では systemd-networkd を使ってネットワークの設定ができるようになった。/etc/systemd/network ディレクトリ以下に設定ファイルを配置すれば良い。

有線のイーサポートを DHCP で設定するには、

  • /etc/systemd/network/MyDhcp.network
    [Match]
    Name=enp*
    
    [Network]
    DHCP=yes

というようなファイルを作成すればよい。ワイルドカードが使えるので、特定のポートのみを固定IPにする場合は、ファイル名先頭の番号を 10-static.network など小さくすることに注意。

また、DHCP の場合、systemd-networkd は自動的に /etc/resolv.conf を更新せず、/run/systemd/resolve/resolv.conf を更新するだけなので、シンボリックリンクを貼ればよい。

$ sudo systemctl enable systemd-resolved
$ sudo systemctl start systemd-resolved
$ sudo ln -s /run/systemd/resolve/resolv.conf /etc/resolv.conf

あとは、systemd-networkd を有効にする。

$ sudo systemctl enable systemd-networkd.service
$ sudo systemctl start systemd-networkd.service

固定 IP

固定 IP の設定法はいろいろあるようだが、とりあえず 2014-10-30 現在 Network configuration - ArchWikiに記載されていた方法を使ってみた。

Raspberry Piの場合。

Network configuration - ArchWikiに記載されていた方法

DHCP の設定ファイルを削除

$ sudo rm /etc/systemd/network/eth0.network

設定ファイルの作成

$ mkdir /etc/conf.d

/etc/conf.d/net-conf-eth0 を以下の内容で作成する。

address=192.168.xx.yy
netmask=24
broadcast=192.168.xx.255
gateway=192.168.xx.zz

ネットワーク起動・終了スクリプトの作成

ネットワーク起動スクリプトを作成する。

/etc/conf.d/net-conf-interface
----------------------------------
address=192.168.1.2
netmask=24
broadcast=192.168.1.255
gateway=192.168.1.1

終了スクリプトを作成する。

/usr/local/bin/net-down.sh
----------------------------------
#!/bin/bash
ip addr flush dev "$1"
ip route flush dev "$1"
ip link set dev "$1" down

作成したスクリプトに実行権を付与する。

$ chmod +x /usr/local/bin/net-{up,down}.sh

systemd への登録

systemd サービスファイルを作成する。

/etc/systemd/system/network@.service
------------------------------------------
[Unit]
Description=Network connectivity (%i)
Wants=network.target
Before=network.target
BindsTo=sys-subsystem-net-devices-%i.device
After=sys-subsystem-net-devices-%i.device

[Service]
Type=oneshot
RemainAfterExit=yes
EnvironmentFile=/etc/conf.d/net-conf-%i
ExecStart=/usr/local/bin/net-up.sh %i
ExecStop=/usr/local/bin/net-down.sh %i

[Install]
WantedBy=multi-user.target

作成したサービスを有効にする。

$ sudo systemctl enable network@eth0
$ sudo systemctl start network@eth0

DNS リゾルバの設定

このままではローカルの DNS サーバが引けないので、以下の作業をする。

$ sudo systemctl stop systemd-resolved
$ sudo systemctl disable systemd-resolved
$ sudo rm /etc/resolv.conf
$ sudo vi /etc/resolv.conf
-----------------------------------------
nameserver 192.168.xxx.yyy};

netctl を使う方法

情報: ArchLinuxでIPを静的に固定する at たにたにっき

無線LAN

情報:Wireless network configuration - ArchWiki

手動接続

最終的には起動時に自動で無線LAN AP に接続するようにしたいが、各ステップで動作確認をしたほうが良いので、まず手動での接続テストを実施する。

必要なパッケージのインストール

暗号化に WPA/WPA2 を利用するには、wpa_supplicant パッケージが必要。

$ sudo pacman -S wpa_supplicant

無線ネットワークポートをアクティブにする

$ ip link show wls3
2: wls3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DORMANT group default qlen 1000
    link/ether 00:13:e8:xx:xx:xx brd ff:ff:ff:ff:ff:ff

赤字の部分が UP になっていることを確認する。万が一、アクティブになっていない場合は、以下のコマンドでアクティブにする。

$ sudo ip link set wls3 up

AP の認証設定

WPA/WPA2 を利用する場合は、/etc/wpa_supplicant/ ディレクトリ以下に設定ファイルを記述する。例えば、

  • /etc/wpa_supplicant/wireless.conf
    network={
        ssid="essid"
        psk="passphrase"
    }

このままでは、パスフレーズが設定ファイルに平文で保存されるので、セキュリティ上このましくない。そこで、wpa_passphrase コマンドを使ってパスフレーズを暗号化する。

$ wpa_passphrase SSID パスフレーズ

標準出力に以下のような内容が表示されるので、設定ファイルに反映する。

network={
	ssid="SSID"
	#psk="passphrase"
	psk=28964ba6ea8b8f3a0db1c4414b327da253d0af5d4f4adccec0f8abfxxxxxxxxx
}

暗号化したパスフレーズを使った例

# Simple case: WPA-PSK, PSK as an ASCII passphrase, allow all valid ciphers
#
# Home
network={
	ssid="SSID1"
	psk=94c34e9e634cd64a3abf803e71eb55393ccd724e98a8616ac93b4xxxxxxxxxxx
	priority=10←この数字が大きい方が優先される
}

# Office
network={
	ssid="SSID2"
	psk=347864bce0aca0bdfc5d546012157106b626e003225bced87eadaxxxxxxxxxxx
	priority=1
}

priority が設定されていないと、セキュリティポリシーや信号強度などに応じて自動的に接続先 AP が選択される。

WEPの場合

network={
        ssid="SSID3"
        key_mgmt=NONE
        wep_key0="WEP key"
        priority=142
}

AP への接続

wpa_supplicant コマンドを使って、AP に接続する。

$ sudo wpa_supplicant -i wls3 -c /etc/wpa_supplicant/wireless.conf

オプションに -B を付けないとデーモンにならないので注意。

DHCP による IP アドレスの取得

$ sudo dhcpcd wls3

動作確認

無事に無線 LAN AP に接続し、通信ができるかどうか確認する。

$ ip address show wls3
2: wls3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:13:e8:xx:xx:xx brd ff:ff:ff:ff:ff:ff
    inet 192.168.aa.bb/24 brd 192.168.aa.255 scope global wls3
       valid_lft forever preferred_lft forever
    inet6 fe80::213:yyyy:yyyy:yyyy/64 scope link 
       valid_lft forever preferred_lft forever
$ iw dev wls3 link
Connected to 44:dc:91:xx:xx:xx (on wls3)
	SSID: MySSID
	freq: 5220
	RX: 872416466 bytes (938430 packets)
	TX: 25391551 bytes (286521 packets)
	signal: -40 dBm
	tx bitrate: 6.0 MBit/s

	bss flags:	short-slot-time
	dtim period:	0
	beacon int:	100
$ ping www.yahoo.co.jp
PING www.g.yahoo.co.jp (124.83.203.233) 56(84) bytes of data.
64 bytes from f8.top.vip.ogk.yahoo.co.jp (124.83.203.233): icmp_seq=1 ttl=54 time=13.8 ms
64 bytes from f8.top.vip.ogk.yahoo.co.jp (124.83.203.233): icmp_seq=2 ttl=54 time=14.6 ms
64 bytes from f8.top.vip.ogk.yahoo.co.jp (124.83.203.233): icmp_seq=3 ttl=54 time=13.6 ms
64 bytes from f8.top.vip.ogk.yahoo.co.jp (124.83.203.233): icmp_seq=4 ttl=54 time=13.7 ms
^C
--- www.g.yahoo.co.jp ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3005ms
rtt min/avg/max/mdev = 13.638/13.971/14.615/0.379 ms

wpa_cli コマンドを用いた設定

/etc/wpa_supplicant/wireless.conf (ファイル名は任意) に以下の行を書いて、wpa_cli コマンドで設定した内容が自動的に設定ファイルに反映されるようにする。

ctrl_interface=/run/wpa_supplicant
update_config=1

自動接続

wpa_supplicant は systemd 用のサービスを提供しているので、これを利用する。

wpa_supplicant@interface名.service
設定ファイルとして /etc/wpa_supplicant/wpa_supplicant-interface名.conf を参照するので、サービスを有効にする前に上で作成したファイルをコピーしておく。

$ sudo cp /etc/wpa_supplicant/wireless.conf /etc/wpa_supplicant/wpa_supplicant-interface名.conf
$ sudo systemctl enable wpa_supplicant@interface名.service

DHCP で IP アドレスを割り当てる場合、dhcpcd を利用して、起動時に自動的に無線ネットワークに接続できるように設定する。

$ sudo systemctl enable dhcpcd@interface名

Trouble Shooting

自動起動できるようになったが、自宅にノートPCを持ち帰ったら、無線 LAN が全く使えなくなっていた。よく見ると、Bluetooth と 無線 LAN のインジケータ LED が消えていた。無線デバイスの状態を調べると、

$ ip link show wls3
3: wls3: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
    link/ether 00:13:e8:xx:xx:xx brd ff:ff:ff:ff:ff:ff

となっており、無線 LAN デバイスがアクティブになっていない。アクティブにしようとすると、

$ sudo ip link set dev wls3 up                          
RTNETLINK answers: Operation not possible due to RF-kill

となり、失敗する。RF-kill で検索すると、rfkill というコマンドで設定できるらしい。現在の状態は、

$ sudo pacman -S rfkill
$ rfkill list                 
0: tpacpi_bluetooth_sw: Bluetooth
	Soft blocked: yes
	Hard blocked: yes
1: phy0: Wireless LAN
	Soft blocked: yes
	Hard blocked: yes

ブロックを解除すると、

$ sudo rfkill unblock all
$ rfkill list            
0: tpacpi_bluetooth_sw: Bluetooth
	Soft blocked: no
	Hard blocked: yes
1: phy0: Wireless LAN
	Soft blocked: no
	Hard blocked: yes

まだハードブロックが有効になっている。よくよく調べてみると、Thinkpad の無線 LAN スイッチが OFF になっていた。orz

参考

net-tools is obsolete -> iproute2

netstat など今までよく使っていたコマンドが ArchLinux では obsolete とされていて、iproute2 パッケージを使うことが推奨されている。

情報:Arch Linux - News: Deprecation of net-tools

# pacman -Ql iproute2 | grep bin
iproute2 /usr/bin/
iproute2 /usr/bin/arpd
iproute2 /usr/bin/bridge
iproute2 /usr/bin/ctstat
iproute2 /usr/bin/genl
iproute2 /usr/bin/ifcfg
iproute2 /usr/bin/ifstat
iproute2 /usr/bin/ip
iproute2 /usr/bin/lnstat
iproute2 /usr/bin/nstat
iproute2 /usr/bin/routef
iproute2 /usr/bin/routel
iproute2 /usr/bin/rtacct
iproute2 /usr/bin/rtmon
iproute2 /usr/bin/rtpr
iproute2 /usr/bin/rtstat
iproute2 /usr/bin/ss
iproute2 /usr/bin/tc

新旧コマンド対応表

net-tools のコマンドiproute2 のコマンド
arpip n (ip neighbor)
ifconfigip a (ip addr), ip link, ip -s (ip -stats)
iptunnelip tunnel
iwconfigiw
nameifip link, ifrename
netstatss, ip route (for netstat-r), ip -s link (for netstat -i), ip maddr (for netstat-g)
routeip r (ip route)

情報:Deprecated Linux networking commands and their replacements | Doug Vitale Tech Blog

ss

netstat の代替コマンド。

# ss -t -u -a
Netid  State      Recv-Q Send-Q   Local Address:Port       Peer Address:Port   
udp    UNCONN     0      0       192.168.xx.aaa:ntp                   *:*       
udp    UNCONN     0      0            127.0.0.1:ntp                   *:*       
udp    UNCONN     0      0                    *:ntp                   *:*       
udp    UNCONN     0      0      fe80::219:99ff:fedf:ea4d%enp3s0:ntp                  :::*       
udp    UNCONN     0      0                  ::1:ntp                  :::*       
udp    UNCONN     0      0                   :::ntp                  :::*       
udp    UNCONN     0      0                   :::dhcpv6-client              :::*       
tcp    LISTEN     0      128                  *:ssh                   *:*       
tcp    ESTAB      0      0       192.168.xx.aaa:ssh       192.168.xx.bb:55449   
tcp    LISTEN     0      128                 :::ssh                  :::*       

参考

情報


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2016-08-04 (木) 19:27:47 (352d)