EdgeRouter-X触ってみた

Page content

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

VPN

外からVPN張って家のファイルサーバにアクセスしたい。 L2TP/IPSec を ここのinstruction に沿って設定。簡単です。

  1. 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
  1. セッション張るために 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
  1. iPhoneから接続試験
fieldvalue
TypeL2TP
Description<as you like!>
Server<er-xのWAN IP addr>
AccountXXXXXXXXXX
RSA SecurIDoff
PasswordYYYYYYYYYYYYYYY
SecretZZZZZZZZZZZZZZZZZZZ
Send All Trafficy (使い方によると思うけど)
  1. 接続確認
  • 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界隈では有名な事業者だしいつもお世話になってるし、ということで。

設定

  1. Hurricane Electricで自分のドメインごとhostしてもらう。その中でDDNS対象FQDNのAレコード(やりたかったらAAAAレコードも)を登録。
  • 別のDNSホスティング事業者でドメイン自体は管理を続けることも可能。その際はDDNSするFQDNをサブドメインとしてホスティング事業者にdelegationの登録をする。
  1. DDNS対象FQDNのレコードに対して :refresh: (更新) ボタンを押し、DDNS keyを生成、登録。
  2. あとは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
  1. 登録確認: 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
  1. 手動で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

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 に移行したいときにハマった。

  1. “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
  1. (補足) 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