Network
cli
Router
EdgeRouter

EdgeRouter X をなるべくCLIで設定する

More than 1 year has passed since last update.

背景

EdgeRouterXをみんなで共同購入した。
設定のノウハウはみなさん挙げてくださっているが、WebUIを使った方法が多いかな、という印象を感じた。
せっかくVyatta系のOSを積んでいるのでCLIで頑張っていこうと思い、メモをしていく。
この記事では、PPPoEによるフレッツ光への接続、LAN側の設定を行う。
IPv6、サーバへの転送等の設定は後日行う。

サーバへの転送についても書きました。
EdgeRouter Xで外部側のポートをLAN内サーバのポートへ転送する設定

使ったもの

  • EdgeRouterX本体
  • ACアダプタ(付属)
  • コンセント変換端子(EuroDKで買ったら付いてきた)
  • LANケーブル
  • LAN-USBアダプタ(MacbookにEthernetないので)

本投稿で行う構成

  • EdgeRouterX
    • eth0:フレッツ光のモデムへ
    • eth1:スイッチへ
  • スイッチ
    • ポート1:サーバへ
    • ポート2:Macbookへ

WebUIでライセンス同意(これいらないかも)

  1. EdgeRouterのeth0とMacbookをLANケーブルで一時的に接続する
  2. Macの設定を以下の通りにする
  3. ブラウザで https://192.168.1.1 にアクセスし、ログインする。
    SSL証明書の警告がでるが無視する。
    1度ログインすればブラウザを閉じてもよい。

Macのネットワーク設定

構成: 手入力
IP アドレス: 192.168.1.2
サブネットマスク: 255.255.255.0
ルーター: 192.168.1.1

初期アカウントパスワード

username: ubnt
password: ubnt

SSHでログイン

Macbookからsshでログイン

$ ssh ubnt@192.168.1.1

パスワードは先程と同じ

本体の設定

ユーザ作成、パスワードの変更

$ configure
# set system login user [ユーザ名]
# set system login user [ユーザ名] authentication plaintext-password [パスワード]
# set system login user [ユーザ名] level admin
# commit
# save
Saving configuration to '/config/config.boot'...
Done
# exit

ここで1度ログアウトして新規作成したユーザでログインする。
デフォルトユーザubntを消す。

$ configure
# delete system login user ubnt
# commit
# save
Saving configuration to '/config/config.boot'...
Done

ホスト名の設定

# set system host-name router

タイムゾーンの設定

# set system time-zone Asia/Tokyo

NTPの設定

NICTのNTPサーバを追加して他を消す。

# set system ntp server ntp.nict.jp         
# delete system ntp server 0.ubnt.pool.ntp.org
# delete system ntp server 1.ubnt.pool.ntp.org
# delete system ntp server 2.ubnt.pool.ntp.org
# delete system ntp server 3.ubnt.pool.ntp.org

LAN構築

eth1ポートの設定

# set interfaces ethernet eth1 address '192.168.0.1/24'
# set interfaces ethernet eth1 description 'INSIDE'

DHCPの設定

192.168.0.19から192.168.0.254をDHCPに設定する。

# set service dhcp-server disabled 'false'
# set service dhcp-server shared-network-name LAN subnet 192.168.0.0/24
# set service dhcp-server shared-network-name LAN subnet 192.168.0.0/24 default-router '192.168.0.1'
# set service dhcp-server shared-network-name LAN subnet 192.168.0.0/24 dns-server '192.168.0.1'
# set service dhcp-server shared-network-name LAN subnet 192.168.0.0/24 domain-name 'internal-network'
# set service dhcp-server shared-network-name LAN subnet 192.168.0.0/24 lease '86400'
# set service dhcp-server shared-network-name LAN subnet 192.168.0.0/24 start 192.168.0.19 stop 192.168.0.254
# exit

DNSの設定

# set service dns forwarding cache-size 0
# set service dns forwarding listen-on eth1
# set service dns forwarding name-server 8.8.8.8
# set service dns forwarding name-server 8.8.4.4
# commit
[ service dhcp-server ]
Starting DHCP server daemon...
# save

Ethernetケーブルを差し替える

一旦ログアウトする。
eth0に刺さってるケーブルをeth1ポートに刺す。
ログインをしてみて入れればOK。

ssh [ユーザ名]@192.168.0.1

WAN設定

Firewallの設定

WANに接続する前にFirewallの設定をする。
Wikiを見ながらとりあえずで。あんまり深く理解してない。

$ configure

# set firewall name WAN_IN default-action drop
# set firewall name WAN_IN description 'WAN to internal'
# set firewall name WAN_IN rule 10 action accept
# set firewall name WAN_IN rule 10 description 'Allow established/related'
# set firewall name WAN_IN rule 10 state established enable
# set firewall name WAN_IN rule 10 state related enable
# set firewall name WAN_IN rule 20 action drop
# set firewall name WAN_IN rule 20 description 'Drop invalid state'
# set firewall name WAN_IN rule 20 state invalid enable

# 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

PPPoEの設定

# set interfaces ethernet eth0 pppoe 0 user-id [プロバイダの接続ID]
# set interfaces ethernet eth0 pppoe 0 password [プロバイダの接続パスワード]
# set interfaces ethernet eth0 pppoe 0 default-route auto
# set interfaces ethernet eth0 pppoe 0 name-server auto
# set interfaces ethernet eth0 pppoe 0 firewall in name WAN_IN
# set interfaces ethernet eth0 pppoe 0 firewall local name WAN_LOCAL
# set interfaces ethernet eth0 pppoe 0 description 'WAN'

NATの設定

# set nat source rule 10 translation address masquerade
# set nat source rule 10 source address 192.168.0.0/24
# set nat source rule 10 outbound-interface pppoe0

フレッツ光向け設定(MTU、MSS)

上記のままの設定だとspeedtest.netなどのサイトに接続できなかった。
フレッツ光でPPPoE通信を行うには別途以下の設定が必要となるらしい。
この場合、PPPoEに必要なヘッダ分8byteを引いたサイズが1度に遅れるデータ量となるため、MTUを1454以下に設定した。
また、MSS-clampは、1度に送るデータ量の上限を接続相手に予め伝えることができる。
この数値は一般にMTUから40引いた値が良いとされているため、1414に設定した。
(ここまで全部「らしい」なので、あとでもう1度勉強してみる必要ある)

# set interfaces ethernet eth0 pppoe 0 mtu 1454

# set firewall modify pppoe-out rule 1 action modify
# set firewall modify pppoe-out rule 1 modify tcp-mss 1414
# set firewall modify pppoe-out rule 1 protocol tcp
# set firewall modify pppoe-out rule 1 tcp flags 'SYN'
# set interfaces ethernet eth0 pppoe 0 firewall out modify pppoe-out

まとめ

上記の設定を行うことでとりあえずの通信を行うことができた。

サーバへの転送やIPv6対応等が残っているが、それはまた後日やっていきたい。

また、作業を行ったあとに書いているので、実際の設定項目と比較して漏れがあったらごめんなさい。

付録の設定は実際の設定を吸い出したものなので、おかしいなと思ったらそちらを見て欲しい。

参考文献

付録・設定

本投稿内で行った結果の設定ファイルを掲載しておく。

firewall {
    all-ping enable
    broadcast-ping disable
    ipv6-receive-redirects disable
    ipv6-src-route disable
    ip-src-route disable
    log-martians enable
    modify pppoe-out {
        rule 1 {
            action modify
            modify {
                tcp-mss 1414
            }
            protocol tcp
            tcp {
                flags SYN
            }
        }
    }
    name WAN_IN {
        default-action drop
        description "WAN to internal"
        rule 10 {
            action accept
            description "Allow established/related"
            state {
                established enable
                related enable
            }
        }
        rule 20 {
            action drop
            description "Drop invalid state"
            state {
                invalid enable
            }
        }
    }
    name WAN_LOCAL {
        default-action drop
        description "WAN to router"
        rule 10 {
            action accept
            description "Allow established/related"
            state {
                established enable
                related enable
            }
        }
        rule 20 {
            action drop
            description "Drop invalid state"
            state {
                invalid enable
            }
        }
    }
    receive-redirects disable
    send-redirects enable
    source-validation disable
    syn-cookies enable
}
interfaces {
    ethernet eth0 {
        address 192.168.1.1/24
        duplex auto
        pppoe 0 {
            default-route auto
            description WAN
            firewall {
                in {
                    name WAN_IN
                }
                local {
                    name WAN_LOCAL
                }
                out {
                    modify pppoe-out
                }
            }
            mtu 1454
            name-server auto
            password [パスワード]
            user-id [ID]
        }
        speed auto
    }
    ethernet eth1 {
        address 192.168.0.1/24
        description INSIDE
        duplex auto
        speed auto
    }
    ethernet eth2 {
        duplex auto
        speed auto
    }
    ethernet eth3 {
        duplex auto
        speed auto
    }
    ethernet eth4 {
        duplex auto
        speed auto
    }
    loopback lo {
    }
    switch switch0 {
        mtu 1500
    }
}
service {
    dhcp-server {
        disabled false
        hostfile-update disable
        shared-network-name LAN {
            authoritative disable
            subnet 192.168.0.0/24 {
                default-router 192.168.0.1
                dns-server 192.168.0.1
                domain-name internal-network
                lease 86400
                start 192.168.0.19 {
                    stop 192.168.0.254
                }
            }
        }
    }
    dns {
        forwarding {
            cache-size 0
            listen-on eth1
            name-server 8.8.8.8
            name-server 8.8.4.4
        }
    }
    gui {
        https-port 443
    }
    nat {
        rule 5010 {
            outbound-interface pppoe0
            source {
                address 192.168.0.0/24
            }
            type masquerade
        }
    }
    ssh {
        port 22
        protocol-version v2
    }
}
system {
    host-name router
    login {
        user [ユーザ名] {
            authentication {
                encrypted-password ****************
                plaintext-password ****************
            }
            level admin
        }
    }
    ntp {
        server ntp.nict.jp {
        }
    }
    syslog {
        global {
            facility all {
                level notice
            }
            facility protocols {
                level debug
            }
        }
    }
    time-zone Asia/Tokyo
}