低価格で高性能な小型ルータ EdgeRouter X

EdgeRouter X (ER-X) とは

Linux で動作するソフトウェアルータ Vyatta をベースにした EdgeOS を搭載したルータで、EdgeRouter シリーズの一番低価格のモデルが EdgeRouter X です。
その価格は 49USD と本当に低価格なのですが、機能性能ともに RTX810 と同等という驚異的なコストパフォーマンスを誇っています。
もう少し詳しい情報は以下もご参照下さい。

EdgeRouter X がすごい | yabe.jp
Ubiquiti Networks: EdgeRouter X (公式)

RTX810 を使っていましたが、個人的に YAMAHA は独特の癖がある気がしていたのもあり、ちょうど友人が個人輸入するというので一緒に買ってもらいました。
送料と関税で8千円くらい、その業者は AC アダプタ用に変換コネクタをつけてくれましたが、常用したかったので PSE マークの付いた AC アダプタを秋葉のマルツで購入したので9千円近くに。
そう考えると Amazon.co.jp で買うのでも良さそう。

設定の情報を得るために

公式サイトにあるドキュメントで基本的なことは設定できます。
搭載されている EdgeOS の元となった Vyatta は開発が中止になってしまったようですが、オープンソースで VyOS として開発が行われており、Vyatta か VyOS の情報がだいたいそのまま利用できます。
このことを頭に入れておくと検索の際にだいぶ助かります。

GUI でも設定できますが SSH で入って CUI で設定入れるのが個人的には楽でしたので、基本的にこの記事では CUI での説明をしています。
また、ある程度高度な設定については GUI では出来ないようです。

基本的な設定は VyOS ユーザガイド がお勧めです。
リファレンスとして EdgeOS 日本語Wiki も便利です。
また一通りの設定は 「Vyatta Core」の後継OSSルータ「VyOS」でマルチホーミングな自宅ネットワークを構築する – [email protected] がとても参考になります。

調べてもあまり出てこなかったものを中心に、いくつか設定をご紹介します。

PPPoE unnumbered の設定

PPPoE unnumbered の設定は調べてみた感じズバリのものはなさそうでした。
local-address で手動で指定する方法を見つけましたが、結局 PPPoE の IPCP で渡される IP アドレスでないと駄目な様子。
そして IPCP で渡される IP アドレスはネットワークアドレスなので、なんともいえない気持ち悪さがあります。
いろいろ調べてみた結果、Unnumbered PPPoE を考える – mura日記 (halfrack) にたどり着きました。
結論から言うと、そのまま素直にネットワークアドレスを使って良さそうなので特別なことはしません。

set interfaces ethernet eth0 pppoe 0 user-id (username@ispname)
set interfaces ethernet eth0 pppoe 0 password (password)
set interfaces ethernet eth0 pppoe 0 mtu 1454

また PPPoE だと Path MTU Discovery Blackhole 問題により一部のサイトにつながらない現象が出る可能性があるので、以下の設定で MSS Clamp を有効にします。

set firewall options mss-clamp interface-type pppoe
set firewall options mss-clamp mss 1414

一部のネットワークでのみ NAT を設定

WAN/DMZ/LAN のような複数のネットワークのうち、LAN ネットワークのみ NAT を設定する方法です。
各 I/F が以下のようになっているとします。

set ethernet eth1 address 192.168.0.1/24
set ethernet eth1 description Private
set ethernet eth2 address 203.0.113.65/29
set ethernet eth2 description Global

この場合、単純に適用するソースアドレスを 192.168.0.0/24 にすれば OK です。

set nat rule 5000 outbound-interface pppoe0
set nat rule 5000 type masquerade
set nat rule 5000 source address 192.168.0.0/24

これで eth2 の 203.0.133.64/29 のネットワークからは NAT されずに出ていきます。
なおマスカレード及びソース NAT はルール番号が5000番以降である必要があります。

UPnP の設定

UPnP の設定はシンプルです。

set service upnp2 wan pppoe0
set service upnp2 listen-on eth1
set service upnp2 nat-pmp enable
set service upnp2 secure-mode enable

upnp2 となっているので一瞬別のプロトコルかなと思いましたが、細かい制限がかけられるようになったもののようです。
upnp の設定が入っている場合は、先に delete service upnp で削除してから設定して下さい。

ここでは AirMac などで使われる NAT-PMP も有効にしていますが必須ではありません。
secure-mode は UPnP の転送要求と転送先を同一 IP アドレスに制限するもののようです。
外部から不正に転送設定されないようにでしょうか。
動作上問題はなさそうですので有効にしておきます。

DHCP で固定のアドレスを設定

DHCP の基本設定はシンプルなので、ここでは特定の端末に固定で IP アドレスを設定する方法を。

set service dhcp-server shared-network-name (poolname) subnet 192.168.0.0/24 static-mapping (name) ip-address 192.168.0.xxx
set service dhcp-server shared-network-name (poolname) subnet 192.168.0.0/24 static-mapping (name) mac-address xx:xx:xx:xx:xx:xx

L2TP/IPsec VPN 設定

最後は外部から L2TP/IPsec VPN で接続する方法です。
後述しますが、いろいろ試行錯誤しましたのでもしかしたら不要な設定があるかもしれません。
しかしながらあまり文献がなかったので、とりあえず動いている設定という事で記載しておきます。

set vpn ipsec ipsec-interfaces interface pppoe0
set vpn ipsec nat-networks allowed-network 192.168.0.0/24
set vpn ipsec nat-traversal enable

IPsec の設定はシンプルですね。
nat-traversal はクライアントが NAT 環境でも IPsec 通信を実現するためのものですので、必ず有効にしておきます。

set vpn l2tp remote-access authentication mode local
set vpn l2tp remote-access authentication local-users username (user)
set vpn l2tp remote-access authentication local-users username (user) password (password)
set vpn l2tp remote-access client-ip-pool start 192.168.0.10
set vpn l2tp remote-access client-ip-pool stop 192.168.0.19
set vpn l2tp remote-access dns-servers server-1 192.168.0.20
set vpn l2tp remote-access ipsec-settings authentication mode pre-shared-secret
set vpn l2tp remote-access ipsec-settings authentication pre-shared-secret (PSK)
set vpn l2tp remote-access ipsec-settings ike-lifetime 3600
set vpn l2tp remote-access outside-address 0.0.0.0

L2TP は設定が多いので上から順番に見ていきます。
authentication は接続のアカウント設定です。
client-ip-pool は VPN 接続時にクライアントに配布される IP アドレスの範囲です。
dns-servers は VPN 接続時にクライアントに設定される DNS サーバです。
ipsec-settings は接続時のプリシェアードキー (PSK) を設定します。
最後の outside-address ですが、このルータが PPPoE 接続のため I/F に固定のアドレスが振られていないので 0.0.0.0 を設定します。

なおこの状態で接続を試すと内部のホスト(ここでは 192.168.0.0/24 にある他のホスト)に接続が出来ません。
上記例だと DNS サーバに設定している 192.168.0.20 にも接続出来ないので名前解決が出来ません。
原因は Proxy ARP の設定が無効なため ARP が解決できず、このルータに client-ip-pool で配布された IP アドレスのホストがぶら下がっていることを他のホストが認識できないためです。
したがって VPN で配布する IP アドレスと同じネットワークの I/F で Proxy ARP を有効にします。

set interfaces ethernet eth1 ip enable-proxy-arp

設定したら、ルータを再起動することをお勧めします。
また配下のスイッチや同一ネットワークの機器も再起動できるならした方が良いかもしれません。
何故なら Proxy ARP 設定前に ARP の解決を試みた場合、失敗したことが機器やスイッチでキャッシュされている可能性があるからです(ネガティブキャッシュ)。
こうなると設定をしたのにしばらく ARP の解決が出来なくて悩むこととなり、試行錯誤することとなります……。

最後に

この金額でこの機能と性能を考えると間違いなく買いだと思いますが、ここで取り上げているように CUI での設定が前提となる事と、EdgeOS 開発者が退職してしまい 今後の運用が不明確であるところが現状の懸念点です。

しばらく稼働させてみてどうなるかと、IPv6 IPoE の設定を今度試してみようと思います。

technical

Posted by yokky