EdgeRouter-X触ってみた
2016/12にアメリカに長期出張に行っている仕事関係の知り合いから「EdgeRouter-X買っていこうか?」という粋なご提案をいただき、手に入れた!約$50≒5500円!素晴らしい。開けてみると写真のように、マウスほどの高さ、幅も狭く手のひらサイズに小さい。いろいろ触ってみる。
initial setup
- 最初の接続はeth0で192.168.1.1/24を設定されているのでそこに直差しでアクセス (ubnt/ubnt)
- userは変更
- ntp等も変更
- ipv4 pppoeは貼れるようになった
- naptで配下にもipv4配れる。
- 配下に今までのbuffalo無線LANルータを設置。
- ルータモードじゃなくてAPモードにした。ただしwebconsoleたたくときにこいつのアドレス探すのに少し苦労する
- firm upgradeをweb consoleからたどって実施(ubntのsupportサイトに行ってイメージを取ってきて、web consoleからer-xにupload)
IPv6
Flets NGNユーザだがホームゲートウェイないタイプなので、NGN網からはRA吹いてきている。なので
自分自身へは
set interfaces etherhet eth0 ipv6 address autoconf
でOKこれじゃ配下の全端末がIPv6対応できないので、ホームNW全体のIPv6化は別途
参考
VPN
外からVPN張って家のファイルサーバにアクセスしたい。 L2TP/IPSec を ここのinstruction に沿って設定。簡単です。
- L2TP/IPSecの設定
set vpn ipsec auto-firewall-nat-exclude enable
set vpn l2tp remote-access authentication local-users username XXXXXXXXXX password YYYYYYYYYYYYYYY
set vpn l2tp remote-access authentication mode local
set vpn l2tp remote-access client-ip-pool start 172.31.255.XXX
set vpn l2tp remote-access client-ip-pool stop 172.31.255.XXX
set vpn l2tp remote-access ipsec-settings authentication mode pre-shared-secret
set vpn l2tp remote-access ipsec-settings authentication pre-shared-secret ZZZZZZZZZZZZZZZZZZZ
set vpn l2tp remote-access ipsec-settings ike-lifetime 3600
set vpn l2tp remote-access outside-address 0.0.0.0 # assuming PPPoE. This may vary up to your env
- セッション張るために firewall でいくつかのプロトコル(順にIKE, L2TP, ESP, NAT-T)を許可する
set firewall name WAN_LOCAL default-action drop
set firewall name WAN_LOCAL description 'WAN to router'
set firewall name WAN_LOCAL rule 10 action accept
set firewall name WAN_LOCAL rule 10 description 'Allow established/related'
set firewall name WAN_LOCAL rule 10 state established enable
set firewall name WAN_LOCAL rule 10 state related enable
set firewall name WAN_LOCAL rule 20 action drop
set firewall name WAN_LOCAL rule 20 description 'Drop invalid state'
set firewall name WAN_LOCAL rule 20 state invalid enable
set firewall name WAN_LOCAL rule 30 action accept
set firewall name WAN_LOCAL rule 30 description 'Allow IKE for Remote VPN Server'
set firewall name WAN_LOCAL rule 30 destination port 500
set firewall name WAN_LOCAL rule 30 protocol udp
set firewall name WAN_LOCAL rule 31 action accept
set firewall name WAN_LOCAL rule 31 description 'Allow L2TP for Remote VPN Server'
set firewall name WAN_LOCAL rule 31 destination port 1701
set firewall name WAN_LOCAL rule 31 protocol udp
set firewall name WAN_LOCAL rule 32 action accept
set firewall name WAN_LOCAL rule 32 description 'Allow ESP for Remote VPN Server'
set firewall name WAN_LOCAL rule 32 destination port 4500
set firewall name WAN_LOCAL rule 32 protocol udp
- iPhoneから接続試験
field | value |
---|---|
Type | L2TP |
Description | <as you like!> |
Server | <er-xのWAN IP addr> |
Account | XXXXXXXXXX |
RSA SecurID | off |
Password | YYYYYYYYYYYYYYY |
Secret | ZZZZZZZZZZZZZZZZZZZ |
Send All Traffic | y (使い方によると思うけど) |
- 接続確認
- iPhone側: “VPN"マークが画面上部につく。vpn先に疎通することを確認
- er-x側: 以下のようにvpnセッションが張られていることが確認できる
user@gw:~$ show vpn remote-access
Active remote access VPN sessions:
User Time Proto Iface Remote IP TX pkt/byte RX pkt/byte
---------- --------- ----- ----- --------------- ------ ------ ------ ------
XXXXXX 00h00m10s L2TP l2tp0 ************* 4 46 5 66
TODO
- what’s L2TP/IPSec? Its security robustness
- other options? SSL VPN?
- what’s ESP?
- what’s NAT-T?
Dynamic DNS
VPN張りに行くのに便利。今回は簡潔だしrouterが自動更新に対応してるし、dualstackだし、世界中にserverがいてanycastできるし、耐障害性あるhe.netのものを利用することにした。Internet界隈では有名な事業者だしいつもお世話になってるし、ということで。
設定
- Hurricane Electricで自分のドメインごとhostしてもらう。その中でDDNS対象FQDNのAレコード(やりたかったらAAAAレコードも)を登録。
- 別のDNSホスティング事業者でドメイン自体は管理を続けることも可能。その際はDDNSするFQDNをサブドメインとしてホスティング事業者にdelegationの登録をする。
- DDNS対象FQDNのレコードに対して :refresh: (更新) ボタンを押し、DDNS keyを生成、登録。
- あとはer-xのほうに設定。 (以下は pppoe 利用時の例)
set service dns dynamic interface pppoe0 service dyndns host-name <DDNS対象FQDN>
set service dns dynamic interface pppoe0 service dyndns login <DDNS対象FQDN>
set service dns dynamic interface pppoe0 service dyndns password <DDNS key>
set service dns dynamic interface pppoe0 service dyndns server dyn.dns.he.net
- 登録確認: ER-Xで以下のコマンドたたいてgoodとなっていればOK
user@router:~$ show dns dynamic status
interface : pppoe0
ip address : ******************
host-name : <DDNS対象FQDN>
last update : Fri Dec 30 18:16:19 2016
update-status: good
- 手動でIPを更新する方法
curl -4 http://<DDNS対象FQDN>:<DDNS key>@dyn.dns.he.net/nic/update?hostname=<DDNS対象FQDN>
またはcurl -6
注意
DS-Lite 環境下では外から IPv4 でのアクセス出来ないので使えません。 ER-X は A レコードしか対応していないようなので、 AAAA は適用できません。 やるなら IPv4 PPPoE を設定しないとかな。 あと、そもそも AAAA はほとんど変わらない(半固定)なので、いいかも。
参考
TODO
- mechanism
- provider side
- relation with DNS server
- client side
- provider side
PPPoE
フレッツ光で ISP の PPPoE を利用する場合
設定
# WAN IF configuration with PPPoE
set interfaces ethernet eth0 description WAN
set interfaces ethernet eth0 duplex auto
set interfaces ethernet eth0 ipv6 address autoconf
set interfaces ethernet eth0 ipv6 dup-addr-detect-transmits 1
set interfaces ethernet eth0 pppoe 0 default-route auto
set interfaces ethernet eth0 pppoe 0 description '<yourdescription>'
set interfaces ethernet eth0 pppoe 0 firewall in name <firewall_name_1> # up to your firewall conf
set interfaces ethernet eth0 pppoe 0 firewall local name <firewall_name_1> # up to your firewall conf
set interfaces ethernet eth0 pppoe 0 mtu 1492 # Flets specification
set interfaces ethernet eth0 pppoe 0 name-server auto
set interfaces ethernet eth0 pppoe 0 password '<yourpassword>'
set interfaces ethernet eth0 pppoe 0 user-id '<yourid>'
set interfaces ethernet eth0 speed auto
# LAN interfaces and switch port. Switch port is not mandatory but up to one's env.
set interfaces ethernet eth1 description LAN-switch
set interfaces ethernet eth1 duplex auto
set interfaces ethernet eth1 speed auto
set interfaces ethernet eth2 description WLAN-router
set interfaces ethernet eth2 duplex auto
set interfaces ethernet eth2 speed auto
set interfaces switch switch0 address 172.31.255.1/24
set interfaces switch switch0 switch-port
set interfaces switch switch0 switch-port interface eth1
set interfaces switch switch0 switch-port interface eth2
# DHCP setting for LAN. Tune so that it fits your env.
set service dhcp-server disabled false
set service dhcp-server hostfile-update disable
set service dhcp-server shared-network-name LAN172 authoritative disable
set service dhcp-server shared-network-name LAN172 subnet 172.31.255.0/24 default-router 172.31.255.1
set service dhcp-server shared-network-name LAN172 subnet 172.31.255.0/24 dns-server 172.31.255.1
set service dhcp-server shared-network-name LAN172 subnet 172.31.255.0/24 lease 86400
set service dhcp-server shared-network-name LAN172 subnet 172.31.255.0/24 start 172.31.255.128 stop 172.31.255.254
set service dhcp-server use-dnsmasq disable
# NAT44
set service nat rule 5010 outbound-interface pppoe0
set service nat rule 5010 type masquerade
不安定事象(2017/2/7)
とにかくすぐ切れる。大量通信したせいかと思ったら、そうでもなく、放って置いても切れる。なんじゃこれは。役に立たん!
切断時はこんなログが出力される。 pppd[2841]: Serial link appears to be disconnected.
から不具合に伴うログが始まっていて、 pppd[2841]: write: Bad file descriptor (9)
あたりからしばらくは同じログ出力を30秒おきに繰り返している。
Feb 7 13:29:40 <routername> pppd[2841]: Serial link appears to be disconnected.
Feb 7 13:29:42 <routername> ntpd[5790]: ntpd exiting on signal 15
Feb 7 13:29:44 <routername> ntpd[9656]: ntpd 4.2.6p2@1.2194-o Fri Jul 29 23:29:52 UTC 2016 (1)
Feb 7 13:29:44 <routername> ntpd[9657]: proto: precision = 43.105 usec
Feb 7 13:29:44 <routername> kernel: ESW: Link Status Changed - Port0 Link Down
Feb 7 13:29:46 <routername> pppd[2841]: Connection terminated: no multilink.
Feb 7 13:29:46 <routername> pppd[2841]: Modem hangup
Feb 7 13:29:46 <routername> ntpd_intres[9663]: host name not found: ntp1.jst.mfeed.ad.jp
Feb 7 13:29:46 <routername> ntpd_intres[9663]: host name not found: ntp2.jst.mfeed.ad.jp
Feb 7 13:29:46 <routername> ntpd_intres[9663]: host name not found: ntp3.jst.mfeed.ad.jp
Feb 7 13:29:47 <routername> kernel: ESW: Link Status Changed - Port0 Link UP
Feb 7 13:30:48 <routername> ntpd_intres[9663]: host name not found: ntp1.jst.mfeed.ad.jp
Feb 7 13:30:48 <routername> ntpd_intres[9663]: host name not found: ntp2.jst.mfeed.ad.jp
Feb 7 13:30:48 <routername> ntpd_intres[9663]: host name not found: ntp3.jst.mfeed.ad.jp
Feb 7 13:30:51 <routername> pppd[2841]: Timeout waiting for PADO packets
Feb 7 13:30:51 <routername> pppd[2841]: Connected to 00:12:e2:70:69:54 via interface eth0
Feb 7 13:30:51 <routername> pppd[2841]: Connect: ppp0 <--> eth0
Feb 7 13:30:51 <routername> pppd[2841]: CHAP authentication failed
Feb 7 13:30:51 <routername> pppd[2841]: Connection terminated: no multilink.
Feb 7 13:31:22 <routername> pppd[2841]: write: Bad file descriptor (9)
Feb 7 13:31:22 <routername> pppd[2841]: Connected to 00:12:e2:70:69:54 via interface eth0
Feb 7 13:31:22 <routername> pppd[2841]: Connect: ppp0 <--> eth0
Feb 7 13:31:25 <routername> pppd[2841]: CHAP authentication failed
Feb 7 13:31:25 <routername> pppd[2841]: Connection terminated: no multilink.
Feb 7 13:31:55 <routername> pppd[2841]: write: Bad file descriptor (9)
Feb 7 13:31:55 <routername> pppd[2841]: Connected to 00:12:e2:70:69:54 via interface eth0
Feb 7 13:31:55 <routername> pppd[2841]: Connect: ppp0 <--> eth0
Feb 7 13:31:58 <routername> pppd[2841]: CHAP authentication failed
Feb 7 13:31:58 <routername> pppd[2841]: Connection terminated: no multilink.
コレに対して、 同じく不安定だというフォーラムの記事 にある以下のフレーズの通りにファイル編集を試みた:
edit the file “/opt/vyatta/etc/pppoe-provider-template”, look for the lines “lcp-echo-interval” and “lcp-echo-failure”, change them to something large (like 20 and 20), reboot the router
ちなみにこのエリアのファイルの編集にはroot権限が必要で、 sudo -s
で入った。
今のところ大丈夫そうである。このまま様子見だ。
Tips
switch interface 削除でハマった
switch interface から bridge interface に移行したいときにハマった。
- “RTNETLINK answers: Cannot assign requested address” とでてswitch0のipを削除できない
- まず無理やりIPをつける:
sudo ip addr add 172.31.255.1/24 dev switch0
- 次に、configureモードで削除する:
delete interfaces switch switch0 address
- (補足) switch0 を削除しようとすると
Can not delete switch0
と言われる
- 結論: switch0 は削除できない。でも
as long as no interfaces assigned, this should be no problem
である。 (UBNT communityより)
細かいコマンド集
- DHCP client の一覧:
show dhcp leases
IP address Hardware Address Lease expiration Pool Client Name ---------- ---------------- ---------------- ---- ----------- 172.31.255.128 xx:xx:xx:xx:xx:xx 2018/01/08 07:27:17 LAN172 Google-Home ... 172.31.255.151 yy:yy:yy:yy:yy:yy 2018/01/08 01:49:54 LAN172 WN-AX1167GR
- インターフェースのキャプチャ:
show interfaces ethernet eth0 capture
すると tcpdump っぽいです
Limitation
- no API like REST
- no NETCONF or other types of automation drivers
Currently I scp the config onto the router and then manually load it in via the “load /path/to/config” command - this way all our config is kept in version control https://community.ubnt.com/t5/EdgeMAX/Config-Automation-Advice-amp-NETCONF/m-p/1365885/highlight/true#M81071