raspberry pi 3でDS-Liteゲートウェイを作る

2017年12月6日

前回の(たぶん)一瞬でできるDS-liteゲートウェイ でスクリプトを作りましたが、今回は、raspberry pi 3にイメージを焼くところからやってみたいと思います。前提として、

  • イメージライター
  • sshクライアント
  • SCPクライアント

が利用可能な状態で行います。


  • OSを焼く

こちらからraspbianをダウンロードしてください。基本的に、CUIしか使わないので記事内ではlite(デスクトップ無し版)を使います。

ダウンロードが終わったら解凍します。ZIP形式なので、windowsの標準機能でも解凍できます。

SDカードに焼きます。私はwin32 Disk Imagerを使っています。書き込みをよく確認しましょう。Writeで書き込みます。

書き込みが終わったら、SSHを有効にするために、bootを開き、「ssh」のファイルを作成します。


  • 初期設定をする

raspberry pi に書き込みが終わったmicroSDとLANケーブルを挿して起動します。

ipアドレスですが、dhcp取得時に「raspberrypi」というホスト名をルーターに渡すので大抵の場合はホスト名でSSH接続できます。

  • ユーザー名 pi
  • パスワード raspberry

がデフォルトです。

初回は証明書がないので、どのターミナルソフトでも警告が出ます。

接続ができたら以下のようになります。


Host 'raspberrypi' resolved to 192.168.1.208.
Connecting to 192.168.1.208:22...
Connection established.
To escape to local shell, press 'Ctrl+Alt+]'.

Linux raspberrypi 4.9.41-v7+ #1023 SMP Tue Aug 8 16:00:15 BST 2017 armv7l

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Wed Sep 27 06:50:14 2017 from 192.168.1.109

SSH is enabled and the default password for the 'pi' user has not been changed.
This is a security risk - please login as the 'pi' user and type 'passwd' to set a new password.

pi@raspberrypi:~ $

パッケージを更新するために、”sudo apt update”と”sudo apt upgrade”を行います。


pi@raspberrypi:~ $ sudo apt update
Get:1 http://mirrordirector.raspbian.org/raspbian stretch InRelease [15.0 kB]
Get:2 http://mirrordirector.raspbian.org/raspbian stretch/main armhf Packages [11.7 MB]
Get:3 http://archive.raspberrypi.org/debian stretch InRelease [25.3 kB]
Get:4 http://archive.raspberrypi.org/debian stretch/main armhf Packages [117 kB]
Get:5 http://archive.raspberrypi.org/debian stretch/ui armhf Packages [26.9 kB]
Fetched 11.9 MB in 36s (323 kB/s)
Reading package lists... Done
Building dependency tree
Reading state information... Done
10 packages can be upgraded. Run 'apt list --upgradable' to see them.
pi@raspberrypi:~ $




pi@raspberrypi:~ $ sudo apt upgrade
Reading package lists... Done
Building dependency tree
Reading state information... Done
Calculating upgrade... Done
The following packages will be upgraded:
bluez dhcpcd5 libperl5.24 libwbclient0 perl perl-base perl-modules-5.24 raspi-config raspi-copies-and-fills samba-common
10 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
Need to get 8,143 kB of archives.
After this operation, 9,216 B of additional disk space will be used.
Do you want to continue? [Y/n] y
Get:1 http://mirrordirector.raspbian.org/raspbian stretch/main armhf libperl5.24 armhf 5.24.1-3+deb9u2 [2,831 kB]
Get:2 http://mirrordirector.raspbian.org/raspbian stretch/main armhf perl armhf 5.24.1-3+deb9u2 [218 kB]
Get:3 http://mirrordirector.raspbian.org/raspbian stretch/main armhf perl-base armhf 5.24.1-3+deb9u2 [1,197 kB]
Get:4 http://mirrordirector.raspbian.org/raspbian stretch/main armhf perl-modules-5.24 all 5.24.1-3+deb9u2 [2,724 kB]
Get:6 http://mirrordirector.raspbian.org/raspbian stretch/main armhf samba-common all 2:4.5.8+dfsg-2+deb9u2 [169 kB]
Get:5 http://ftp.jaist.ac.jp/pub/Linux/raspbian-archive/raspbian stretch/main armhf libwbclient0 armhf 2:4.5.8+dfsg-2+deb9u2 [120 kB]
Get:7 http://archive.raspberrypi.org/debian stretch/main armhf bluez armhf 5.43-2+rpt1+deb9u1 [722 kB]
Get:8 http://archive.raspberrypi.org/debian stretch/main armhf dhcpcd5 armhf 1:6.11.5-1+rpt2 [135 kB]
Get:9 http://archive.raspberrypi.org/debian stretch/main armhf raspi-copies-and-fills armhf 0.6 [7,226 B]
Get:10 http://archive.raspberrypi.org/debian stretch/main armhf raspi-config all 20170926 [18.8 kB]
Fetched 8,143 kB in 31s (258 kB/s)
Reading changelogs... Done
Preconfiguring packages ...
(Reading database ... 34363 files and directories currently installed.)
Preparing to unpack .../libperl5.24_5.24.1-3+deb9u2_armhf.deb ...
Unpacking libperl5.24:armhf (5.24.1-3+deb9u2) over (5.24.1-3+deb9u1) ...
Preparing to unpack .../perl_5.24.1-3+deb9u2_armhf.deb ...
Unpacking perl (5.24.1-3+deb9u2) over (5.24.1-3+deb9u1) ...
Preparing to unpack .../perl-base_5.24.1-3+deb9u2_armhf.deb ...
Unpacking perl-base (5.24.1-3+deb9u2) over (5.24.1-3+deb9u1) ...
Setting up perl-base (5.24.1-3+deb9u2) ...
(Reading database ... 34363 files and directories currently installed.)
Preparing to unpack .../0-perl-modules-5.24_5.24.1-3+deb9u2_all.deb ...
Unpacking perl-modules-5.24 (5.24.1-3+deb9u2) over (5.24.1-3+deb9u1) ...
Preparing to unpack .../1-libwbclient0_2%3a4.5.8+dfsg-2+deb9u2_armhf.deb ...
Unpacking libwbclient0:armhf (2:4.5.8+dfsg-2+deb9u2) over (2:4.5.8+dfsg-2+deb9u1) ...
Preparing to unpack .../2-samba-common_2%3a4.5.8+dfsg-2+deb9u2_all.deb ...
Unpacking samba-common (2:4.5.8+dfsg-2+deb9u2) over (2:4.5.8+dfsg-2+deb9u1) ...
Preparing to unpack .../3-bluez_5.43-2+rpt1+deb9u1_armhf.deb ...
Unpacking bluez (5.43-2+rpt1+deb9u1) over (5.43-2+rpi1) ...
Preparing to unpack .../4-dhcpcd5_1%3a6.11.5-1+rpt2_armhf.deb ...
Unpacking dhcpcd5 (1:6.11.5-1+rpt2) over (1:6.10.1-1+rpi3) ...
Preparing to unpack .../5-raspi-copies-and-fills_0.6_armhf.deb ...
Unpacking raspi-copies-and-fills (0.6) over (0.5-1) ...
Preparing to unpack .../6-raspi-config_20170926_all.deb ...
Unpacking raspi-config (20170926) over (20170811) ...
Setting up perl-modules-5.24 (5.24.1-3+deb9u2) ...
Setting up libperl5.24:armhf (5.24.1-3+deb9u2) ...
Setting up libwbclient0:armhf (2:4.5.8+dfsg-2+deb9u2) ...
Setting up raspi-copies-and-fills (0.6) ...
Setting up dhcpcd5 (1:6.11.5-1+rpt2) ...
Installing new version of config file /etc/dhcpcd.conf ...
Setting up samba-common (2:4.5.8+dfsg-2+deb9u2) ...
Setting up raspi-config (20170926) ...
Setting up perl (5.24.1-3+deb9u2) ...
Processing triggers for libc-bin (2.24-11+deb9u1) ...
Processing triggers for systemd (232-25+deb9u1) ...
Processing triggers for man-db (2.7.6.1-2) ...
Processing triggers for dbus (1.10.18-1) ...
Setting up bluez (5.43-2+rpt1+deb9u1) ...
pi@raspberrypi:~ $

次にIPアドレスの固定を行います。がその前にちゃんとバックアップを取ります。


sudo cp /etc/dhcpcd.conf /etc/dhcpcd.conf.bak

  • 固定するNIC                              eth0
  • IPアドレス        192.168.1.9
  • デフォルトゲートウェイ  192.168.1.4
  • DNSサーバー       192.168.1.4

に固定するときは以下になります


sudo echo interface eth0 >> /etc/dhcpcd.conf
sudo echo static ip_address=192.168.1.9/24 >> /etc/dhcpcd.conf
sudo echo static routers=192.168.1.4 >> /etc/dhcpcd.conf
sudo echo static domain_name_servers=192.168.1.4 >> /etc/dhcpcd.conf

書き込まれた場合、以下のように最後の行に追加されています。


pi@raspberrypi:~ $ cat /etc/dhcpcd.conf
# A sample configuration for dhcpcd.
# See dhcpcd.conf(5) for details.

# Allow users of this group to interact with dhcpcd via the control socket.
#controlgroup wheel

# Inform the DHCP server of our hostname for DDNS.
hostname

# Use the hardware address of the interface for the Client ID.
clientid
# or
# Use the same DUID + IAID as set in DHCPv6 for DHCPv4 ClientID as per RFC4361.
# Some non-RFC compliant DHCP servers do not reply with this set.
# In this case, comment out duid and enable clientid above.
#duid

# Persist interface configuration when dhcpcd exits.
persistent

# Rapid commit support.
# Safe to enable by default because it requires the equivalent option set
# on the server to actually work.
option rapid_commit

# A list of options to request from the DHCP server.
option domain_name_servers, domain_name, domain_search, host_name
option classless_static_routes
# Most distributions have NTP support.
option ntp_servers
# Respect the network MTU. This is applied to DHCP routes.
option interface_mtu

# A ServerID is required by RFC2131.
require dhcp_server_identifier

# Generate Stable Private IPv6 Addresses instead of hardware based ones
slaac private

# Example static IP configuration:
#interface eth0
#static ip_address=192.168.0.10/24
#static ip6_address=fd51:42f8:caae:d92e::ff/64
#static routers=192.168.0.1
#static domain_name_servers=192.168.0.1 8.8.8.8 fd51:42f8:caae:d92e::1

# It is possible to fall back to a static IP if DHCP fails:
# define static profile
#profile static_eth0
#static ip_address=192.168.1.23/24
#static routers=192.168.1.1
#static domain_name_servers=192.168.1.1

# fallback to static profile on eth0
#interface eth0
#fallback static_eth0
interface eth0
static ip_address=192.168.1.9/24
static routers=192.168.1.4
static domain_name_servers=192.168.1.4

書き込めていなかったり、間違えて入力してしまった場合はバックアップから復元しましょう。(cp コピー元 コピー先 に注意)


sudo cp /etc/dhcpcd.conf.bak /etc/dhcpcd.conf

ここまで出来たら再起動します。

sudo reboot

※再起動後は変更したIPアドレスで接続しましょう。

再接続後に以下のコマンドを入力することで、正しく設定できたかを確認します。


#ipアドレスの確認

pi@raspberrypi:~ $ ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.1.9 netmask 255.255.255.0 broadcast 192.168.1.255
inet6 fd14:10e5:a677:682d:e10d:9859:825b:81b7 prefixlen 128 scopeid 0x0<global>
inet6 fe80::ab7a:7ad8:9b74:1e39 prefixlen 64 scopeid 0x20<link>
ether xx:xx:xx:xx:xx:xx txqueuelen 1000 (Ethernet)
RX packets 1115 bytes 126779 (123.8 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 285 bytes 29094 (28.4 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1 (Local Loopback)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

wlan0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
ether xx:xx:xx:xx:xx:xx txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

#DNSサーバーが利用可能か確認

pi@raspberrypi:~ $ host www.google.com
www.google.com has address 172.217.25.228
www.google.com has IPv6 address 2404:6800:4004:81b::2004

#インターネット(IPv4 6)疎通確認

pi@raspberrypi:~ $ ping -c 4 www.google.com
PING www.google.com (172.217.25.228) 56(84) bytes of data.
64 bytes from nrt12s14-in-f228.1e100.net (172.217.25.228): icmp_seq=1 ttl=56 time=13.0 ms
64 bytes from nrt12s14-in-f228.1e100.net (172.217.25.228): icmp_seq=2 ttl=56 time=13.1 ms
64 bytes from nrt12s14-in-f228.1e100.net (172.217.25.228): icmp_seq=3 ttl=56 time=13.3 ms
64 bytes from nrt12s14-in-f228.1e100.net (172.217.25.228): icmp_seq=4 ttl=56 time=13.3 ms

--- www.google.com ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3004ms
rtt min/avg/max/mdev = 13.084/13.235/13.378/0.140 ms

pi@raspberrypi:~ $ ping6 -c 4 www.google.com
PING www.google.com(nrt12s14-in-x04.1e100.net (2404:6800:4004:81b::2004)) 56 data bytes
64 bytes from nrt12s14-in-x04.1e100.net (2404:6800:4004:81b::2004): icmp_seq=1 ttl=54 time=12.1 ms
64 bytes from nrt12s14-in-x04.1e100.net (2404:6800:4004:81b::2004): icmp_seq=2 ttl=54 time=9.57 ms
64 bytes from nrt12s14-in-x04.1e100.net (2404:6800:4004:81b::2004): icmp_seq=3 ttl=54 time=9.68 ms
64 bytes from nrt12s14-in-x04.1e100.net (2404:6800:4004:81b::2004): icmp_seq=4 ttl=54 time=9.41 ms

--- www.google.com ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3004ms
rtt min/avg/max/mdev = 9.417/10.198/12.115/1.115 ms

これで初期設定は終わりです。

※ログインパスワード等は自分で変えてください。


  • DS-liteの設定

scpなどでこちらのファイルを同一階層に入れてください。(SSH上のエディターからペーストしてもいけます)

このスクリプトを使う上で必ずこちらを読んでから使ってください。初期設定がいる箇所があります。

以下のような状態になれば大丈夫です。


pi@raspberrypi:~ $ ls -l
total 12
-rw-r--r-- 1 pi pi 178 Sep 27 07:45 dslite-auto-start.service
-rw-r--r-- 1 pi pi 1259 Sep 27 07:43 dslite.sh
-rw-r--r-- 1 pi pi 205 Sep 27 07:44 setup-dslite-scripts.sh

次に”setup-dslite-scripts.sh”に対して実行権限を与えます。


pi@raspberrypi:~ $ chmod +x setup-dslite-scripts.sh
pi@raspberrypi:~ $ ls -l
total 12
-rw-r--r-- 1 pi pi 178 Sep 27 07:45 dslite-auto-start.service
-rw-r--r-- 1 pi pi 1259 Sep 27 07:43 dslite.sh
-rwxr-xr-x 1 pi pi 205 Sep 27 07:44 setup-dslite-scripts.sh

インストールします。cpを使ったインストールですので、どこに保存しているかはわかると思います。


pi@raspberrypi:~ $ sudo ./setup-dslite-scripts.sh
Created symlink /etc/systemd/system/multi-user.target.wants/dslite-auto-start.service → /etc/systemd/system/dslite-auto-start.service.

再起動します。


sudo reboot

再起動が終わったら再度、sshで接続してください。次のコマンドを実行すると、ds-liteが出来ています。


pi@raspberrypi:~ $ ifconfig
dslite: flags=209<UP,POINTOPOINT,RUNNING,NOARP> mtu 1452
inet6 fe80::381e:9ff:feec:bdb3 prefixlen 64 scopeid 0x20<link>
unspec FD-14-10-E5-A6-77-68-2D-00-00-00-00-00-00-00-00 txqueuelen 1 (UNSPEC)
RX packets 1247 bytes 719696 (702.8 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 1209 bytes 172866 (168.8 KiB)
TX errors 6 dropped 6 overruns 0 carrier 0 collisions 0

eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.1.9 netmask 255.255.255.0 broadcast 192.168.1.255
inet6 fd14:10e5:a677:682d:e10d:9859:825b:81b7 prefixlen 128 scopeid 0x0<global>
inet6 fe80::ab7a:7ad8:9b74:1e39 prefixlen 64 scopeid 0x20<link>
ether xx:xx:xx:xx:xx:xx txqueuelen 1000 (Ethernet)
RX packets 2788 bytes 1009495 (985.8 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 2681 bytes 1020999 (997.0 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1 (Local Loopback)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

wlan0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
ether xx:xx:xx:xx:xx:xx txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

ちゃんとdsliteで接続できているか確認してみましょう。


pi@raspberrypi:~ $ traceroute www.google.com
traceroute to www.google.com (172.217.25.228), 30 hops max, 60 byte packets
1 ike-gw00.transix.jp (14.0.9.66) 8.137 ms 7.984 ms 7.896 ms
2 ike-bbrt10.transix.jp (14.0.9.65) 8.052 ms 8.248 ms 7.907 ms
3 210.173.176.243 (210.173.176.243) 8.796 ms 9.236 ms 8.954 ms
4 108.170.242.97 (108.170.242.97) 9.108 ms 9.272 ms *
5 108.170.233.19 (108.170.233.19) 9.146 ms 9.216 ms 9.740 ms
6 nrt12s14-in-f228.1e100.net (172.217.25.228) 9.684 ms 9.269 ms 9.393 ms

transix.jpを利用していますので、dslite接続しています。

 

次にwindowsでdsliteを利用してみます。”windowsキー+R”で”ファイル名を指定して実行”を開きます。”ncpa.cpl”と入力して実行します。

するとすべてのネットワーク接続が表示されるので、インターネットに利用しているNICを選んでください。

プロパティをクリック

インターネットプロトコル バージョン4(TCP/IPv4) をダブルクリック

 

 

これでokをクリックしすべて閉じれば設定は完了です。IPアドレス確認サイトでドメイン名に”shared.user.transix.jp”があれば、dsliteで接続できています。

ちなみにですが、既にあるルーターのDHCPが配信するデフォルトゲートウェイを変更したほうが楽です。

※追記

DHCPが配信するデフォルトゲートウェイを変更できる機種(ルーター)が限られていることを確認しました。

ASUSBUFFALOはできるっぽいです。

 

以上でraspberry pi3 をdsliteゲートウェイにすることが出来ました。