ブログ

Linux・オープンソースプロジェクトのティップス紹介

2017/02/16  Orange Pi, リナックス


Orange Pi PCとRealtek製WiFi-USBドングルRTL8188ETV(EU)によるルータとしての利用方法を纏めました。RTL8188ETVは安価なWiFiモジュールですが、2つの独立したインターフェイスによりAP(アクセスポイント)モードとSTA(クライアント)モードを併用して利用することができます。NATとiptablesにより、これら2つの独立したインターフェイス間を橋渡しすることでハードにルータとしての機能を持たせることができます。他のWiFiドングルでもiw listコマンドにより出力されるSupported interface modesの項目に”AP”が含まれていれば同様に設定することでルータとしての活用ができる筈です。

 

■ 対象ハードとOS

Orange Pi PC: ARMBIAN 5.25 stable Debian GNU/Linux 8 (jessie) 3.4.113-sun8i 

 

■ 新規インストールソフト

hostapdはデフォルトでインストールされているため下記2点を新規インストールして下さい。

dnsmasq:DNS・DHCPサーバとして機能

iptables-persistent:iptablesによる設定事項を保存し起動時に読み込ませるのに必要です。

$ sudo apt-get install dnsmasq iptables-persistent

iptables-persistentでは2つの設定画面が表示されるので両方共yesを選択して下さい。

 

■ 設定フロー

設定フローは以下の通りです。

  1. iw listによるWiFiモジュールの機能確認
  2. NetworkManagerの無効化
  3. hostapd(アクセスポイントデーモン)の設定
  4. ネットワークインターフェイスの設定
  5. dnsmasqの設定
  6. NATとiptablesの設定

 

1. iw listによるWiFiモジュールの機能確認

iw listコマンドによりWiFiモジュールの機能確認をします。

$ sudo iw list

 

出力内容からSupported interface modeの項を確認します。

	Supported interface modes:
		 * IBSS
		 * managed
		 * AP
		 * monitor
		 * P2P-client
		 * P2P-GO
	software interface modes (can always be added):
		 * monitor
	interface combinations are not supported

APがリストアップされていればアクセスポイントとしての利用ができます。

 

2. NetworkManagerの無効化

ArmbianではデフォルトでインストールされているNetworkManagerですが、デスクトップ環境でネットワーク設定をしないのであれば無効化した方がネットワーク設定の自由度が上がります。システムサービスとして起動しているのでサービス停止・無効とし、サービスデーモンを再読込します。

$ sudo systemctl stop NetworkManager
$ sudo systemctl disable NetworkManager
$ sudo systemctl daemon-reload

NetworkManagerサービスを無効化することで従来のNetworkサービスが自動的に有効となります(メモリー消費量も50MB以上は削減されると思います)。

ネットワークの設定は/etc/network/interfacesファイルにより行います。

 

3. hostapd(アクセスポイントデーモン)の設定

hostapd起動時の設定ファイルを指定します。

$ sudo pico /etc/default/hostapd

 

以下DAEMON_CONF="/etc/hostapd/hostapd.conf"を指定します。

# Defaults for hostapd initscript
#
# See /usr/share/doc/hostapd/README.Debian for information about alternative
# methods of managing hostapd.
#
# Uncomment and set DAEMON_CONF to the absolute path of a hostapd configuration
# file and hostapd will be started during system boot. An example configuration
# file can be found at /usr/share/doc/hostapd/examples/hostapd.conf.gz
#
DAEMON_CONF="/etc/hostapd/hostapd.conf"

 

hostapd設定ファイルを作成します。

$ sudo pico /etc/hostapd/hostapd.conf

 

ssidによるアクセス先とwpa_passphraseによるパスワードなどを指定します。interfaceには$sudo iwconfigコマンドにより表示される2つのWiFiネットワークインターフェイスwlan0またはwlan1を指定して下さい。

ssid=access_point_name
interface=wlan0
hw_mode=g
channel=5
driver=nl80211
logger_syslog=0
logger_syslog_level=0
wmm_enabled=1
ieee80211n=1
wpa=3
preamble=1
#wpa_psk=xxxxx
wpa_passphrase=pass_phrase
wpa_key_mgmt=WPA-PSK
wpa_pairwise=CCMP TKIP
rsn_pairwise=CCMP
auth_algs=1
macaddr_acl=0
noscan=1
#ht_capab=[HT40-][SHORT-GI-40][SHORT-GI-40][DSSS_CCK-40]
country_code=JP
#ieee80211d=1

 

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

/etc/network/interfacesファイルによるネットワークインターフェイスの設定を行います。

$ sudo pico /network/interfaces

 

設定内容は以下の通りですが内容は任意です。

# Wired adapter #1
allow-hotplug eth0
#no-auto-down eth0
iface eth0 inet dhcp
#address 192.168.0.100
#netmask 255.255.255.0
#gateway 192.168.0.1
dns-nameservers 8.8.8.8 8.8.4.4
#	hwaddress ether # if you want to set MAC manually
#	pre-up /sbin/ifconfig eth0 mtu 3838 # setting MTU for DHCP, static just: mtu 3838


# Wireless adapter #1
# Armbian ships with network-manager installed by default. To save you time
# and hassles consider using 'sudo nmtui' instead of configuring Wi-Fi settings
# manually. The below lines are only meant as an example how configuration could
# be done in an anachronistic way:
# 
#---- Realtek 8188eu wlan interface AP (access defined in /etc/hostapd/hostapd.conf)
allow-hotplug wlan0
iface wlan0 inet static
address 192.168.14.164
netmask 255.255.255.0
network 192.168.14.0
#gateway 192.168.0.1
#dns-nameservers 8.8.8.8 8.8.4.4
#   wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
# Disable power saving on compatible chipsets (prevents SSH/connection dropouts over WiFi)
#wireless-mode Managed
#wireless-power off

#----Realtek 8188eu wlan interface client
allow-hotplug wlan1
iface wlan1 inet dhcp
#address 192.168.10.164
#netmask 255.255.255.0
#network 192.168.10.0
#gateway 192.168.10.1
dns-nameservers 8.8.8.8 8.8.4.4
   wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
# Disable power saving on compatible chipsets (prevents SSH/connection dropouts over WiFi)
#wireless-mode Managed
#wireless-power off

# Local loopback
auto lo
iface lo inet loopback

 

wlan0をアクセスポイント、wlan1をインターネットに接続されている市販ルータのクライアントとして設定しています。

wlan1から市販ルータへの接続はwpa_supplicantにより処理されるのでwpa_supplicant.confを編集します。

以下コマンドによりアクセスポイントへのパスワードを暗号化します。

$ wpa_passphrase MYSSID passphrase
network={
    ssid="MYSSID"
    #psk="passphrase"
    psk=59e0d07fa4c7741797a4e394f38a5c321e3bed51d54ad5fcbd3f84bc7415d73d
}

 

出力された内容を以下のファイルに書き込みます。

$ sudo pico /etc/wpa_supplicant/wpa_supplicant.conf
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1

network={
    ssid="MYSSID"
    #psk="passphrase"
    psk=59e0d07fa4c7741797a4e394f38a5c321e3bed51d54ad5fcbd3f84bc7415d73d
    key_mgmt=WPA-PSK
    priority=99 
}

 

5. dnsmasqの設定

アクセスポイントとして設定したモジュールに接続するクライアント端末にIPアドレスを割り当てるために、ハード本体にDHCPサーバ機能を持たせる必要があります。isc-dhcp-serverも候補に入れましたがdnsmasqの方が軽量で設定も簡単であることから今回はdnsmasqをインストールしました。ページ頭の事前準備でインストール済です。dnsmasq.confにより設定をします。

$ sudo pico /etc/dnsmasq.conf

 

デフォルトでdnsmasqのDHCP機能は無効にされているため、使用したいときは/etc/dnsmasq.confで有効にする必要があります。以下は中心となる設定です:

# Only listen to routers' LAN NIC.  Doing so opens up tcp/udp port 53 to
# localhost and udp port 67 to world:
interface=wlan0

# dnsmasq will open tcp/udp port 53 and udp port 67 to world to help with
# dynamic interfaces (assigning dynamic ips). Dnsmasq will discard world
# requests to them, but the paranoid might like to close them and let the 
# kernel handle them:
bind-interfaces

# Dynamic range of IPs to make available to LAN pc
dhcp-range=192.168.14.164,192.168.14.200,12h

# If you’d like to have dnsmasq assign static IPs, bind the LAN computer's
# NIC MAC address:
dhcp-host=aa:bb:cc:dd:ee:ff,192.168.14.164

dhcp-hostのwlan0のハードウェアアドレスは$sudo ifconfigにより確認して下さい。dhcp-rangeの設定など/etc/network/interfacesとの整合性を考慮する必要があります。

 

DNS キャッシュの設定

単一のコンピュータ上で dnsmasq を DNS キャッシュデーモンとしてセットアップするには /etc/dnsmasq.conf を編集して listen-address ディレクティブをアンコメントし、ローカルホストの IP アドレスを追記してください:

listen-address=127.0.0.1

 

DHCPサーバ側(dnsmasq側)の設定

dnsmasq を設定した後は、DHCP クライアントが /etc/resolv.conf にある既知の DNS アドレスの前にローカルホストのアドレスを挿入させるようにする必要があります。これによって外部の DNS でクエリを解決しようとする前に全てのクエリが dnsmasq に送られるようになります。

DHCPクライアントソフトにより設定が異なります。

dhcpcdの場合

dhcpcd には /etc/resolv.conf にネームサーバを前と後ろに追加する機能があります。それぞれ /etc/resolv.conf.head と /etc/resolv.conf.tail ファイルを作成します:

echo "nameserver 127.0.0.1" > /etc/resolv.conf.head

 

dhclientの場合

dhclient の場合、/etc/dhcp/dhclient.conf の以下の部分をアンコメントしてください:

prepend domain-name-servers 127.0.0.1;

 

6. NATとiptablesの設定

NATによりアクセスポイントに接続した複数のクライアントを1つのIPアドレスへと導きます。

$ sudo pico /etc/sysctl.conf
# Uncomment the next line to enable packet forwarding for IPv4
net.ipv4.ip_forward=1

net.ipv4.ip_forword=1の箇所をアンコメントします。

 

設定をすぐに反映させるため、

$ sudo sh -c "echo 1 > /proc/sys/net/ipv4/ip_forward"

を実行します。

 

iptableによりwlan0とwlan1の橋渡しの設定をします。

$ sudo iptables -t nat -A POSTROUTING -o wlan1 -j MASQUERADE
$ sudo iptables -A FORWARD -i wlan1 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT
$ sudo iptables -A FORWARD -i wlan0 -o wlan1 -j ACCEPT

 

以下のコマンドで上記設定の確認ができます。

$ sudo iptables -t nat -S
$ sudo iptables -S

 

システム起動時に上記設定を自動的に読み込ませるためiptables-persistentによる以下コマンドを実行します。

$ sudo sh -c "iptables-save > /etc/iptables/rules.v4"

 

再起動してアクセスポイントの表示と接続が確立されるか確認して下さい。

フォーラムにも同内容を掲載します。問題など発生した場合には、その都度フォーラム記事の方で改善点を掲載するようにします。

comments powered by Disqus