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

情報:Network configuration - ArchWiki

ネットワークデバイス名

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

ip コマンド

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

pre> $ 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

/pre>

DHCP

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

pre>

# dhcpcd interface名

/pre>

systemd-networkd

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

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

  • /etc/systemd/network/MyDhcp.network

    pre> [Match] Name=enp*

[Network] DHCP=yes

/pre>

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

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

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

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

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

/pre>

固定 IP

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

Raspberry Piの場合。

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

DHCP の設定ファイルを削除

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

/pre>

設定ファイルの作成

pre> $ mkdir /etc/conf.d

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

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

/pre>

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

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

pre> /etc/conf.d/net-conf-interface


address=192.168.1.2 netmask=24 broadcast=192.168.1.255 gateway=192.168.1.1

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

pre> /usr/local/bin/net-down.sh


#!/bin/bash ip addr flush dev "$1" ip route flush dev "$1" ip link set dev "$1" down

/pre>

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

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

/pre>

systemd への登録

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

pre> /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

/pre>

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

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

/pre>

DNS リゾルバの設定

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

pre> $ 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};

/pre>

netctl を使う方法

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

無線LAN

情報:Wireless network configuration - ArchWiki

手動接続

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

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

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

pre> $ sudo pacman -S wpa_supplicant

/pre>

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

pre> $ 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

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

pre> $ sudo ip link set wls3 up

/pre>

AP の認証設定

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

  • /etc/wpa_supplicant/wireless.conf

    pre> network={

       ssid="essid"
       psk="passphrase"

    }

    /pre>

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

pre> $ wpa_passphrase SSID パスフレーズ

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

pre> network={

	ssid="SSID"
	#psk="passphrase"
	psk=28964ba6ea8b8f3a0db1c4414b327da253d0af5d4f4adccec0f8abfxxxxxxxxx

}

/pre>

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

pre>

# Simple case: WPA-PSK, PSK as an ASCII passphrase, allow all valid ciphers

#

# Home network={

	ssid="SSID1"
	psk=94c34e9e634cd64a3abf803e71eb55393ccd724e98a8616ac93b4xxxxxxxxxxx
	priority=10←&color(red){この数字が大きい方が優先される};

}

# Office network={

	ssid="SSID2"
	psk=347864bce0aca0bdfc5d546012157106b626e003225bced87eadaxxxxxxxxxxx
	priority=1

}

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

WEPの場合

pre> network={

       ssid="SSID3"
       key_mgmt=NONE
       wep_key0="WEP key"
       priority=142

}

/pre>

AP への接続

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

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

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

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

pre> $ sudo dhcpcd wls3

/pre>

動作確認

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

pre> $ 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

    /pre>

wpa_cli コマンドを用いた設定

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

pre> ctrl_interface=/run/wpa_supplicant update_config=1

/pre>

自動接続

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

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

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

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

pre> $ sudo systemctl enable dhcpcd@interface名

/pre>

Trouble Shooting

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

pre> $ 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

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

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

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

pre> $ 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

/pre> ブロックを解除すると、

pre> $ 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

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

参考

net-tools is obsolete -> iproute2

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

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

pre>

# 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

/pre>

新旧コマンド対応表

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 の代替コマンド。

pre>

# 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 :::*

/pre>

参考

情報


トップ   差分 バックアップ リロード   一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2016-08-04 (木) 19:27:47 (440d)