技術者になりたい何か

技術者になりたい何かの覚書的な何かです

local用のDNSキャッシュサーバを立ててみる

LAN内用のDNSキャッシュサーバをBINDで立てます。

OSはDebian9、パッケージはbind9

aptで普通にインストール。
キャッシュサーバとして動かすだけなら設定は割と簡単かも。

■設定

・/etc/bind/named.conf

LAN内からの問い合わせを受付け、問い合わせ転送先はプロバイダのDNSサーバ。
ipv6は無効。

・/var/cache/bind/named.ca(ルートサーバ情報ファイル)

↓からDL。
ftp://ftp.internic.net/domain/named.cache

$ curl ftp://ftp.internic.net/domain/named.cache > named.ca
$ cat named.ca
$ sudo mv named.ca /var/cache/bind/named.ca

hintファイルはごくまれに更新があるらしいので、
定期的にチェックするかcronで最新取ってくるスクリプトを用意すると良いと思う。

更新は

$ dig @m.root-servers.net. ns > /var/cache/bind/named.ca

とか。(mじゃなくてもよい)

↓ではスクリプトでやってるようです。

network.station.ez-net.jp

・/var/cache/bind/local.zone (ローカル用zoneファイル)

・/var/cache/bind/local.rev (local逆引き用zoneファイル)


■起動てすと→起動

named-checkconfで設定ファイル指定して、構文に間違いがないかチェック。

$ sudo named-checkconf /etc/bind/named.conf

systemctl で起動

$ sudo systemctl start bind9

status確認。エラーが出てたらここのメッセージかjournalctl -xeの出力見ながら設定ファイルなおす。

$ sudo systemctl status bind9
● bind9.service - BIND Domain Name Server
Loaded: loaded (/lib/systemd/system/bind9.service; enabled; vendor preset: ena
Active: active (running) since Sun 2018-03-18 22:53:53 JST; 11s ago
Docs: man:named(8)
Process: 19689 ExecStop=/usr/sbin/rndc stop (code=exited, status=0/SUCCESS)
Main PID: 19695 (named)
CGroup: /system.slice/bind9.service
└─19695 /usr/sbin/named -f -u bind -4

3月 18 22:53:53 tminserver named[19695]: automatic empty zone: 1.0.0.0.0.0.0.0.0.
3月 18 22:53:53 tminserver named[19695]: automatic empty zone: D.F.IP6.ARPA
3月 18 22:53:53 tminserver named[19695]: automatic empty zone: 8.E.F.IP6.ARPA
3月 18 22:53:53 tminserver named[19695]: automatic empty zone: 9.E.F.IP6.ARPA
3月 18 22:53:53 tminserver named[19695]: automatic empty zone: A.E.F.IP6.ARPA
3月 18 22:53:53 tminserver named[19695]: automatic empty zone: B.E.F.IP6.ARPA
3月 18 22:53:53 tminserver named[19695]: automatic empty zone: 8.B.D.0.1.0.0.2.IP
3月 18 22:53:53 tminserver named[19695]: automatic empty zone: EMPTY.AS112.ARPA
3月 18 22:53:53 tminserver named[19695]: configuring command channel from '/etc/b
3月 18 22:53:53 tminserver named[19695]: command channel listening on 127.0.0.1#9

 

■動作確認

サーバ上からdigってみる

$ dig 8.8.8.8

; <<>> DiG 9.10.3-P4-Debian <<>> 8.8.8.8
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 40476
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;8.8.8.8. IN A

;; AUTHORITY SECTION:
. 1406 IN SOA a.root-servers.net. nstld.verisign-grs.com. 2018031800 1800 900 604800 86400

;; Query time: 160 msec
;; SERVER: 192.168.11.1#53(192.168.11.1)
;; WHEN: Sun Mar 18 22:57:37 JST 2018
;; MSG SIZE rcvd: 111

 

 

SERVERで自ホスト(DNSサーバホスト)のIPが出てればおk。
一回digったらキャッシュされるので次は早いはず。

$ dig 8.8.8.8

; <<>> DiG 9.10.3-P4-Debian <<>> 8.8.8.8
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 60317
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;8.8.8.8. IN A

;; AUTHORITY SECTION:
. 1403 IN SOA a.root-servers.net. nstld.verisign-grs.com. 2018031800 1800 900 604800 86400

;; Query time: 0 msec
;; SERVER: 192.168.11.1#53(192.168.11.1)
;; WHEN: Sun Mar 18 22:57:40 JST 2018
;; MSG SIZE rcvd: 111

 

速くなってますね。

■オープンリゾルバになってたりしないかチェック。

オープンリゾルバ確認サイト公開のお知らせ

$ wget -qO - http://www.openresolver.jp/cli/check.html

2つ結果が出るはずだけど、一つはプロバイダのDNS。両方OKならば大丈夫。


■LAN内のクライアントから動作確認。

@でサーバIP指定してdigってみる

$ dig @192.168.11.1 twitter.com

; <<>> DiG 9.9.5-9+deb8u15-Debian <<>> @192.168.11.1 twitter.com
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 17526
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 13, ADDITIONAL: 27

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;twitter.com. IN A

;; ANSWER SECTION:
twitter.com. 1173 IN A 104.244.42.1

;; AUTHORITY SECTION:
com. 164279 IN NS j.gtld-servers.net.
com. 164279 IN NS h.gtld-servers.net.
com. 164279 IN NS g.gtld-servers.net.
com. 164279 IN NS c.gtld-servers.net.
com. 164279 IN NS m.gtld-servers.net.
com. 164279 IN NS a.gtld-servers.net.
com. 164279 IN NS e.gtld-servers.net.
com. 164279 IN NS l.gtld-servers.net.
com. 164279 IN NS i.gtld-servers.net.
com. 164279 IN NS k.gtld-servers.net.
com. 164279 IN NS d.gtld-servers.net.
com. 164279 IN NS b.gtld-servers.net.
com. 164279 IN NS f.gtld-servers.net.

;; ADDITIONAL SECTION:
a.gtld-servers.net. 164279 IN A 192.5.6.30
a.gtld-servers.net. 164279 IN AAAA 2001:503:a83e::2:30
b.gtld-servers.net. 164279 IN A 192.33.14.30
b.gtld-servers.net. 164279 IN AAAA 2001:503:231d::2:30
c.gtld-servers.net. 164279 IN A 192.26.92.30
c.gtld-servers.net. 164279 IN AAAA 2001:503:83eb::30
d.gtld-servers.net. 164279 IN A 192.31.80.30
d.gtld-servers.net. 164279 IN AAAA 2001:500:856e::30
e.gtld-servers.net. 164279 IN A 192.12.94.30
e.gtld-servers.net. 164279 IN AAAA 2001:502:1ca1::30
f.gtld-servers.net. 164279 IN A 192.35.51.30
f.gtld-servers.net. 164279 IN AAAA 2001:503:d414::30
g.gtld-servers.net. 164279 IN A 192.42.93.30
g.gtld-servers.net. 164279 IN AAAA 2001:503:eea3::30
h.gtld-servers.net. 164279 IN A 192.54.112.30
h.gtld-servers.net. 164279 IN AAAA 2001:502:8cc::30
i.gtld-servers.net. 164279 IN A 192.43.172.30
i.gtld-servers.net. 164279 IN AAAA 2001:503:39c1::30
j.gtld-servers.net. 164279 IN A 192.48.79.30
j.gtld-servers.net. 164279 IN AAAA 2001:502:7094::30
k.gtld-servers.net. 164279 IN A 192.52.178.30
k.gtld-servers.net. 164279 IN AAAA 2001:503:d2d::30
l.gtld-servers.net. 164279 IN A 192.41.162.30
l.gtld-servers.net. 164279 IN AAAA 2001:500:d937::30
m.gtld-servers.net. 164279 IN A 192.55.83.30
m.gtld-servers.net. 164279 IN AAAA 2001:501:b1f9::30

;; Query time: 4 msec
;; SERVER: 192.168.11.1#53(192.168.11.1)
;; WHEN: Wed Mar 21 21:14:30 JST 2018
;; MSG SIZE rcvd: 852

 

いけているようなら名前解決を最初にこのLAN内DNSサーバでするように設定。
Linux機ならresolv.confにサーバIPを追記、というかnameserverの一番上にDNSサーバの記述を加える。

/etc/resolv.conf

# Generated by resolvconf
domain tmin.net
nameserver 192.168.11.1 ←今回立てたDNSサーバ
nameserver XXX.XXX.XXX.XXX
nameserver XXX.XXX.XXX.XXX

一回目

$ dig hatena.ne.jp

; <<>> DiG 9.12.0 <<>> hatena.ne.jp
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 49201
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 13, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;hatena.ne.jp. IN A

;; ANSWER SECTION:
hatena.ne.jp. 600 IN A 59.106.194.19

;; AUTHORITY SECTION:
. 68186 IN NS b.root-servers.net.
. 68186 IN NS l.root-servers.net.
. 68186 IN NS i.root-servers.net.
. 68186 IN NS d.root-servers.net.
. 68186 IN NS e.root-servers.net.
. 68186 IN NS k.root-servers.net.
. 68186 IN NS m.root-servers.net.
. 68186 IN NS c.root-servers.net.
. 68186 IN NS h.root-servers.net.
. 68186 IN NS a.root-servers.net.
. 68186 IN NS g.root-servers.net.
. 68186 IN NS f.root-servers.net.
. 68186 IN NS j.root-servers.net.

;; Query time: 27 msec
;; SERVER: 192.168.11.1#53(192.168.11.1)
;; WHEN: 水 3月 21 18:28:15 JST 2018
;; MSG SIZE rcvd: 268

 

2回目

$ dig hatena.ne.jp

; <<>> DiG 9.12.0 <<>> hatena.ne.jp
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 9592
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 13, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;hatena.ne.jp. IN A

;; ANSWER SECTION:
hatena.ne.jp. 598 IN A 59.106.194.19

;; AUTHORITY SECTION:
. 68184 IN NS b.root-servers.net.
. 68184 IN NS d.root-servers.net.
. 68184 IN NS l.root-servers.net.
. 68184 IN NS e.root-servers.net.
. 68184 IN NS i.root-servers.net.
. 68184 IN NS a.root-servers.net.
. 68184 IN NS m.root-servers.net.
. 68184 IN NS h.root-servers.net.
. 68184 IN NS j.root-servers.net.
. 68184 IN NS f.root-servers.net.
. 68184 IN NS c.root-servers.net.
. 68184 IN NS g.root-servers.net.
. 68184 IN NS k.root-servers.net.

;; Query time: 1 msec
;; SERVER: 192.168.11.1#53(192.168.11.1)
;; WHEN: 水 3月 21 18:28:17 JST 2018
;; MSG SIZE rcvd: 268

 2回めのほうが速くなってればキャッシュされたのをちゃんと使っている。

 

■キャッシュを消したいときとか

rndcコマンドでおk。

$ sudo rndc flush

オプションは下記のようだけど、systemctl使ったらreloadもrestartもstopもできるからなぁ。

rndcでnamedをコントロールする - maruko2 Note.

 

reload named.conf と ゾーン情報をリロードする。シリアル番号が増えているゾーン情報のみリロードする。
reload zone [class [view]] ゾーンを指定しゾーン情報をリロードする。シリアル番号が増えているゾーン情報のみリロードする。
reconfig named.conf と、新しく追加したゾーンのみリロードする。
stats サーバの統計情報を /var/named/named.stats ファイルに書き出す。
status サーバのステータス情報を表示(標準出力)する。
dumpdb [-all|-cache|-zones] [view ...] キャッシュデータを /var/named/named_dump.db ファイルにダンプする。
flush サーバのキャッシュをすべて消去する。
stop named を停止する。rc スクリプトでも使用されている。


■とりあえず立ててみたけど


それぞれの設定内容が適切なのかは謎。
とりあえずオープンリゾルバにはなってないので、迷惑かけることはないと思われ。

 

 

Linuxで回線速度とかスループットとか

ちょっと前に作ったDebian Server兼ルータ機のスループット的なものを計測してみる。

 

■前提

ルータ機のip a

$ 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
2: enp2s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:13:3b:2f:23:f3 brd ff:ff:ff:ff:ff:ff
inet 221.118.111.147/24 brd 255.255.255.255 scope global enp2s0
valid_lft forever preferred_lft forever
3: enp3s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:1d:60:fc:50:b0 brd ff:ff:ff:ff:ff:ff
inet 192.168.11.1/24 brd 192.168.11.255 scope global enp3s0
valid_lft forever preferred_lft forever

enp2s0側をCATVモデムに繋いでWAN側、enp3s0をLAN側にしています。
テストに使用したクライアント機はLAN側にぶら下がってるうちの一つ。
有線接続のArch Linuxになります。

■speedtest-cliで回線速度

github.com

pipはPythonのパッケージ管理ツールらしい。
DebianデフォルトのPythonには付属してなかったっぽいので、DLしてインストール。

$ curl -O https://bootstrap.pypa.io/get-pip.py
$ sudo python get-pip.py
Collecting pip
Downloading pip-9.0.2-py2.py3-none-any.whl (1.4MB)
100% |████████████████████████████████| 1.4MB 514kB/s
Collecting setuptools
Downloading setuptools-39.0.0-py2.py3-none-any.whl (569kB)
100% |████████████████████████████████| 573kB 1.2MB/s
Collecting wheel
Downloading wheel-0.30.0-py2.py3-none-any.whl (49kB)
100% |████████████████████████████████| 51kB 4.0MB/s
Installing collected packages: pip, setuptools, wheel
Successfully installed pip-9.0.2 setuptools-39.0.0 wheel-0.30.0

$ python -m pip -V
pip 9.0.2 from /usr/local/lib/python2.7/dist-packages (python 2.7)

 

 

speedtest-cliインストール

$ sudo pip install speedtest-cli
Collecting speedtest-cli
Downloading speedtest_cli-2.0.0-py2.py3-none-any.whl
Installing collected packages: speedtest-cli
Successfully installed speedtest-cli-2.0.0

実行。

$ speedtest-cli
Retrieving speedtest.net configuration...
Testing from XXXXXXXXXX(xxx.xxx.xxx.xxxx)...
Retrieving speedtest.net server list...
Selecting best server based on ping...
Hosted by rxy (individual) (Osaka) [156.41 km]: 35.733 ms
Testing download speed................................................................................
Download: 12.41 Mbit/s
Testing upload speed...............................................................................................
.Upload: 4.48 Mbit/s

あるぇー?なんか遅くね?

Mbit/sなので、8倍してMbpsが出ます。
DL 100Mbps, UL 36Mbpsくらいか。

ちなみにこのサーバ機じゃなくて、メインのPCから速度JPで測ってみたら
306 ms 108.39 Mb/s 7.68 Mb/s
だってー。

なんで間のルータより速度出てんだろうか。

■iperf3でLAN内のPCからの速度

・Server側
iperf3 -s で立ち上げておく。
5201ポートで待ち受けるので、必要に応じてポート開放。
(今回はLAN内のPCからやったのでなし)

$ iperf3 -s
-----------------------------------------------------------
Server listening on 5201
-----------------------------------------------------------
Accepted connection from 192.168.11.2, port 60242
[ 5] local 192.168.11.1 port 5201 connected to 192.168.11.2 port 60244
[ ID] Interval Transfer Bandwidth
[ 5] 0.00-1.00 sec 108 MBytes 904 Mbits/sec
[ 5] 1.00-2.00 sec 112 MBytes 941 Mbits/sec
[ 5] 2.00-3.00 sec 112 MBytes 941 Mbits/sec
[ 5] 3.00-4.00 sec 112 MBytes 940 Mbits/sec
[ 5] 4.00-5.00 sec 112 MBytes 941 Mbits/sec
[ 5] 5.00-6.00 sec 112 MBytes 941 Mbits/sec
[ 5] 6.00-7.00 sec 111 MBytes 934 Mbits/sec
[ 5] 7.00-8.00 sec 112 MBytes 941 Mbits/sec
[ 5] 8.00-9.00 sec 112 MBytes 941 Mbits/sec
[ 5] 9.00-10.00 sec 112 MBytes 941 Mbits/sec
[ 5] 10.00-10.04 sec 3.99 MBytes 940 Mbits/sec
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bandwidth
[ 5] 0.00-10.04 sec 0.00 Bytes 0.00 bits/sec sender
[ 5] 0.00-10.04 sec 1.09 GBytes 937 Mbits/sec receiver
-----------------------------------------------------------
Server listening on 5201
-----------------------------------------------------------

・Client側
iperf3 -c [IP]

$ iperf3 -c 192.168.11.1
Connecting to host 192.168.11.1, port 5201
[ 5] local 192.168.11.2 port 60244 connected to 192.168.11.1 port 5201
[ ID] Interval Transfer Bitrate Retr Cwnd
[ 5] 0.00-1.00 sec 112 MBytes 938 Mbits/sec 0 84.8 KBytes
[ 5] 1.00-2.00 sec 112 MBytes 942 Mbits/sec 0 84.8 KBytes
[ 5] 2.00-3.00 sec 112 MBytes 941 Mbits/sec 0 94.7 KBytes
[ 5] 3.00-4.00 sec 112 MBytes 940 Mbits/sec 0 99.0 KBytes
[ 5] 4.00-5.00 sec 112 MBytes 942 Mbits/sec 0 99.0 KBytes
[ 5] 5.00-6.00 sec 112 MBytes 942 Mbits/sec 0 160 KBytes
[ 5] 6.00-7.00 sec 111 MBytes 935 Mbits/sec 0 194 KBytes
[ 5] 7.00-8.00 sec 112 MBytes 941 Mbits/sec 0 194 KBytes
[ 5] 8.00-9.00 sec 112 MBytes 941 Mbits/sec 0 194 KBytes
[ 5] 9.00-10.00 sec 112 MBytes 941 Mbits/sec 0 194 KBytes
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bitrate Retr
[ 5] 0.00-10.00 sec 1.09 GBytes 940 Mbits/sec 0 sender
[ 5] 0.00-10.00 sec 1.09 GBytes 940 Mbits/sec receiver

iperf Done. 

 

0.00-10.04sec で 平均937Mbits/sec


■ethtoolで接続状況

ens2s0(WAN側)

$ sudo ethtool enp2s0
Settings for enp2s0:
Supported ports: [ TP MII ]
Supported link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/Half 1000baseT/Full
Supported pause frame use: No
Supports auto-negotiation: Yes
Advertised link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/Half 1000baseT/Full
Advertised pause frame use: Symmetric Receive-only
Advertised auto-negotiation: Yes
Link partner advertised link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/Full
Link partner advertised pause frame use: No
Link partner advertised auto-negotiation: Yes
Speed: 1000Mb/s
Duplex: Full
Port: MII
PHYAD: 0
Transceiver: internal
Auto-negotiation: on
Supports Wake-on: pumbg
Wake-on: g
Current message level: 0x00000033 (51)
drv probe ifdown ifup
Link detected: yes

ens3s0(LAN側)

$ sudo ethtool enp3s0
Settings for enp3s0:
Supported ports: [ TP MII ]
Supported link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/Half 1000baseT/Full
Supported pause frame use: No
Supports auto-negotiation: Yes
Advertised link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/Half 1000baseT/Full
Advertised pause frame use: Symmetric Receive-only
Advertised auto-negotiation: Yes
Link partner advertised link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/Full
Link partner advertised pause frame use: Symmetric
Link partner advertised auto-negotiation: Yes
Speed: 1000Mb/s
Duplex: Full
Port: MII
PHYAD: 0
Transceiver: internal
Auto-negotiation: on
Supports Wake-on: pumbg
Wake-on: ug
Current message level: 0x00000033 (51)
drv probe ifdown ifup
Link detected: yes


Speed: 1000Mb/s
Duplex: Full
なので、1000baseTでfull duplex接続。ちゃんと認識してる。

■dstat

オプション無しだと一通りの状況。
$ dstat
You did not select any stats, using -cdngy by default.
----total-cpu-usage---- -dsk/total- -net/total- ---paging-- ---system--
usr sys idl wai hiq siq| read writ| recv send| in out | int csw
0 0 100 0 0 0| 953B 4611B| 0 0 | 0 2B| 125 101
0 0 100 0 0 0| 0 0 |9706B 10k| 0 0 | 99 137
0 0 100 0 0 0| 0 0 |9204B 9188B| 0 0 | 77 103
1 0 99 0 0 0| 0 0 | 48k 48k| 0 0 | 273 274
1 0 99 0 0 0| 0 0 | 12k 12k| 0 0 | 138 156
0 0 100 0 0 0| 0 0 | 15k 15k| 0 0 | 147 83
1 0 98 2 0 0| 0 32k| 11k 11k| 0 0 | 123 122
0 0 100 0 0 0| 0 8192B| 15k 15k| 0 0 | 137 96
1 0 100 0 0 0| 0 0 | 12k 12k| 0 0 | 86 85
1 0 98 1 0 1| 0 16k| 488k 487k| 0 0 | 943 152
0 0 100 0 0 0| 0 0 | 13k 13k| 0 0 | 120 75

-n 1 オプションで一秒ごと

$ dstat -n 1
-net/total-
recv send
0 0
10k 9977B
504k 504k
9400B 9020B
9806B 9486B
9276B 9136B 

一秒ごと表示したまま、speedtest-cli

$ dstat -n 1
-net/total-
recv send
0 0
12k 12k
9571B 9305B
9668B 9452B
9857B 9537B
9778B 9398B
9591B 9271B
9332B 9128B
319k 22k
10k 10k
10k 9904B
10k 9512B
11k 11k
9251B 9065B
17k 16k
9288B 9102B
9875B 9555B
25k 25k
9450B 9430B
9655B 9109B
9755B 9603B
11k 10k
11k 10k
-net/total-
recv send
12k 12k
13k 13k
2443k 43k
10k 9743B
9067B 8927B
9322B 9116B
9462B 9142B
7118k 108k
4543k 51k
1114k 37k
9713B 9453B
9791B 9771B
198k 21k
9773B 9453B
26k 549k
10k 9711B
25k 25k
26k 26k
20k 20k
81k 1952k
72k 2226k
63k 1568k
30k 760k
-net/total-
recv send
12k 11k
27k 26k
13k 13k
19k 22k
9610B 9470B
9457B 9017B

 
同じくクライアント機で速度JPの測定中。


$ dstat -n 1
-net/total-
recv send
0 0
21M 21M
25M 25M
25M 25M
22M 22M
23M 23M
26M 26M
24M 24M
22M 22M
25M 25M
26M 26M
24M 24M
25M 25M
22M 22M
25M 25M
26M 26M
25M 25M
20M 20M
25M 25M
25M 25M
7775k 7774k
12k 11k
976k 976k
-net/total-
recv send
2271k 2271k
2313k 2313k
2199k 2199k
2292k 2291k
2233k 2234k
2288k 2287k
2167k 2166k
2273k 2272k
2229k 2229k
2230k 2224k
2241k 2247k
2278k 2278k
2283k 2282k
2246k 2246k
2246k 2245k
2334k 2331k
2259k 2262k
2160k 2160k
2215k 2210k
1111k 1115k
11k 11k
9735B 9595B
25k 25k
-net/total-
recv send
9780B 9580B

サーバ機自体でspeedtest-cli実行してるときよりクライアント機で速度JPやってるときのほうが大分大きいですが・・・

というわけでクライアント機でspeedtest-cliをやってみたよ。

$ speedtest-cli
Retrieving speedtest.net configuration...
Testing from Community Network Center (221.118.111.147)...
Retrieving speedtest.net server list...
Selecting best server based on ping...
Hosted by rxy (individual) (Osaka) [156.41 km]: 34.233 ms
Testing download speed................................................................................
Download: 111.79 Mbit/s
Testing upload speed......................................................................................................
Upload: 13.92 Mbit/s

何この違い・・・

ルータ機を挟んで外に繋がってるはずなのにクライアントの方が速度出てるってのがよくわからないですが、
既製品のルータ使ってたときよりクライアントは若干早くなってるので良しとします。

Linuxのサーバ機をルータとして動かす

iptablesdhcpサーバでブロードバンドルータと同機能を揃える。

■方針
Linuxサーバ(Debian)にNIC増設
 →片方をWAN側、片方をLAN側にしてルータとして機能させる。
DHCPサーバ立ててIP割り振りも管理。
今まで使ってたルータ(baffalo)は無線アクセスポイントとして使用。

■今まで

baffalo(192.168.11.1)-サーバ
           -デスクトップPC数台
           -無線接続のあれこれ

■構想
Debianサーバ(192.168.11.1) -ハブ-有線接続のPC数台
                -baffalo(192.168.11.100)-無線接続のあれこれ


1.NICの設定


設定ファイルは/etc/network/interfaces
enp2s0をWAN、enp3s0をLANに設定する。
ちなみにうちの回線はCATVなので、WAN側は普通に局のdhcpから取得する設定。
enp3s0は固定で192.168.11.1を当てる。

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

source /etc/network/interfaces.d/*

# The loopback network interface
auto lo
iface lo inet loopback

#WAN
allow-hotplug enp2s0
iface enp2s0 inet dhcp

#LAN
allow-hotplug enp3s0
iface enp3s0 inet static
address 192.168.11.1
netmask 255.255.255.0
network 192.168.11.0
broadcast 192.168.11.255
gateway 192.168.11.1

 

できたらネットワーク再起動

$ sudo systemctl restart networking

反映されないこと多々あったけど、サーバ自体再起動すると反映されました。

 

2.DHCPサーバ立てる

DHCPサーバにはisc-dhcp-serverを使用。

$ sudo apt-get install isc-dhcp-server

設定ファイルは/etc/dhcp/dhcpd.conf

ネットワークは192.168.11.0
DNSはルータとして使用するサーバ自体とプロバイダ提供のもの。
割り振るレンジは192.168.11.10~192.168.11.254 にしてます。

あと常用の2台のPCは固定IPを割り振っています。

dhcpサーバ機能を提供するのはLAN側なので、インターファイスを指定します。

/etc/default/isc-dhcp-server の INTERFACESv4 でLAN側のインターファイス指定。
IPv6にも対応するならv6の方も。(今回はやりません)

$ emacs /etc/default/isc-dhcp-server

INTERFACESv4="enp3s0"

 

起動→確認→自動起動設定

$ sudo systemctl start isc-dhcp-server.service
$ sudo systemctl status isc-dhcp-server.service
● isc-dhcp-server.service - LSB: DHCP server
Loaded: loaded (/etc/init.d/isc-dhcp-server; generated; vendor preset: enabled)
Active: active (running) since Sat 2018-02-10 03:46:33 JST; 13h ago
Docs: man:systemd-sysv-generator(8)
Process: 1094 ExecStart=/etc/init.d/isc-dhcp-server start (code=exited, status=0/SUCCESS)
CGroup: /system.slice/isc-dhcp-server.service
└─1106 /usr/sbin/dhcpd -4 -q -cf /etc/dhcp/dhcpd.conf enp3s0

2月 10 17:20:30 tminserver dhcpd[1106]: DHCPINFORM from 192.168.11.16 via enp3s0: not authoritative for subnet 192.168.1
2月 10 17:20:39 tminserver dhcpd[1106]: DHCPINFORM from 192.168.11.16 via enp3s0: not authoritative for subnet 192.168.1
2月 10 17:20:47 tminserver dhcpd[1106]: DHCPINFORM from 192.168.11.16 via enp3s0: not authoritative for subnet 192.168.1

$ sudo systemctl enable isc-dhcp-server.service

 

うまく行ってれば上記のような感じ。
起動失敗したときはsystemctl status とかjournalctl -xe でエラーログ確認しましょう。


3.IPforward有効にしてiptablesの設定

IPforward有効にするには
$ sudo echo 1 > /proc/sys/net/ipv4/ip_forward

なのですが、これだと再起動時にもとに戻ってしまうので永続化。

$ emacs /etc/sysctl.conf
net.ipv4.ip_forward=1

これで再起動時も有効のままになります。

iptablesの設定(余計なのが一部入ってるかも)
いちいち手打ちにすると大分大変なので、シェルスクリプトにしておいて実行するのが吉。
saveしといてrestoresてもいいけれども。

WANをenp2s0
LANをenp3s0
WAN側IPはプロバイダに割り振られてるので、ip a の出力からうまいことIPを切り出す。
LAN側IPは固定で192.168.11.1

初期化

デフォルトルール
・OUTPUT,INPUT,FORWARDをDROP,LAN側へのINPUTを許可。

WAN側にてプライベートIPへの通信をDROP

すでに確立してる通信を許可

LAN側のFORWARDを許可

NATでMASQUERADE

loとの通信を許可

ICMP(ping)を許可

LOGに記録する色々

多分、割と最低限でセキュリティ的にはもう少し詰めたほうがいいと思われ。
あと、もしかしたら必要な通信を拒否してるかもしれない。

状態確認。

$ sudo iptables -nvL
Chain INPUT (policy DROP 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
31038 2676K ACCEPT all -- enp3s0 * 0.0.0.0/0 0.0.0.0/0
0 0 DROP all -- enp2s0 * 192.168.0.0/16 0.0.0.0/0
0 0 DROP all -- enp2s0 * 172.16.0.0/12 0.0.0.0/0
1222 404K DROP all -- enp2s0 * 10.0.0.0/8 0.0.0.0/0
26 3532 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
0 0 ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0 state NEW
0 0 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0 icmptype 0
9 365 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0 icmptype 8
1 60 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:20022
1462 90998 LOGGING all -- * * 0.0.0.0/0 0.0.0.0/0

Chain FORWARD (policy DROP 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
0 0 DROP all -- enp2s0 * 192.168.0.0/16 0.0.0.0/0
0 0 DROP all -- enp2s0 * 172.16.0.0/12 0.0.0.0/0
0 0 DROP all -- enp2s0 * 10.0.0.0/8 0.0.0.0/0
689K 394M ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
21449 10M ACCEPT all -- enp3s0 * 0.0.0.0/0 0.0.0.0/0
0 0 LOGGING all -- * * 0.0.0.0/0 0.0.0.0/0

Chain OUTPUT (policy DROP 2539 packets, 659K bytes)
pkts bytes target prot opt in out source destination
9520 1002K ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
0 0 ACCEPT all -- * lo 0.0.0.0/0 0.0.0.0/0 state NEW
0 0 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0 icmptype 0
6 288 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0 icmptype 8

Chain LOGGING (2 references)
pkts bytes target prot opt in out source destination
42 1708 LOG all -- * * 0.0.0.0/0 0.0.0.0/0 limit: avg 3/hour burst 5 LOG flags 0 level 4 prefix "DROP:"
1462 90998 DROP all -- * * 0.0.0.0/0 0.0.0.0/0

一旦はこれでルータとして動くようになりました。


4.今まで使ってたbaffaloのルータを無線アクセスポイントとして使う

無線APとして使うには、ROUTER→BRIDGEにすればよい。
これでルータ機能、DHCP機能などなどが止まって、無線LAN中継機になります。
あと、有線のWANポートもLANポートもすべてLANポートとして動くようになります。
よって、無線の中継機能付きハブになると思って良さげ。

BRODGEモードに変更して適当なポートにルータにしたサーバからのケーブルを接続。
ROUTERモードのときは192.168.11.1だったけど、BRIDGEモードにすると192.168.11.100になるので、
ブラウザからアクセスして必要なら設定。

今回はROUTER→BRIDGEに切り替えて接続するだけで、今までの設定のまま無線APとして動くようになってくれました。


ちなみに今気づいたけど、この設定したサーバ機から名前解決ができていない。(LAN内の他の端末からはおk

$ ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=57 time=15.3 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=57 time=14.0 ms
64 bytes from 8.8.8.8: icmp_seq=3 ttl=57 time=15.6 ms
^C
--- 8.8.8.8 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2002ms
rtt min/avg/max/mdev = 14.078/15.003/15.600/0.678 ms

$ ping google.com
ping: google.com: 名前解決に一時的に失敗しました

 

 

うーむ。。。

 

 

2/19ついき

OUTPUTのデフォルトをDROPにしてたから、個別にport 53への通信を許可するか、

OUTPUTを許可するかどっちかしないとそりゃ通りませんよね。

 

個別許可の場合は

iptables -A OUTPUT -p udp --dport 53 -j ACCEPT

を追記、

OUTPUT全許可の場合は

iptables -P OUTPUT DROP

iptables -P OUTPUT ACCEPT

にすればおk

 

Sponsored Link