(vyos)ノートPCを家庭用ルータにする

何をするか

使わなくなったノートPC上でvyosというネットワークOSを導入して、ノートPCを家庭用ルータとして使用してみます。
やる理由としてはvyosを使ってルータを作ってみたかっただけです。

環境
OS:Win8
ソフト:VMware Workstation 12 Player
↓ざっくり構成(before)

↓ざっくり構成(after)
※無線LANアダプタがあればvyos自体がAPにもなれます。

vyosの機能

vyosは企業などで使われる商用ルータと同等の機能があります。
家庭用ルータとしてはほぼ不要ですが…。
yvso機能wiki

WebキャッシュサーバやIPSecVPNは家庭でも使えるかも。

家庭用ルータに必要な機能を洗い出し

・送信元NAT
自宅のPCがインターネットに出る際に使用
・DHCP
自宅のPCがAPにアクセスした際にローカルアドレスを自動取得する為に使用
・DNS転送
ISP(WAN側)から自動取得したDNSの情報をDHCPクライアントに伝える事が出来ないので、自身がDNSサーバのように振る舞いISPのDNSへクエリを中継するため。

VMware Workstationの設定など

vyosのisoをダウンロードして仮想マシンを作成する
vyosのisoをダウンロード → vyos

仮想マシン、仮想ネットワークエディタの設定。
自動ブリッジではなくVMnetを使用したのは、今後の物理インタフェース追加も考えてインタフェースを明示的に指定する為です。
NATを使用しているのはホスト(ノートPC)に振られているグローバルIPをvyosで使用する為です。

ノートPC内部のイメージはこんな感じ。
USBNICを1つつけてるので物理NICが2つあります。

vyosの設定

初期設定は長くなるので別の記事で書きます

LAN側(eth2)、WAN側(eth3)のインタフェースを認識している事を確認。

vyos@vyos:~$ show interfaces
Codes: S - State, L - Link, u - Up, D - Down, A - Admin Down
Interface        IP Address                        S/L  Description
---------        ----------                        ---  -----------
eth2             -                                 u/u
eth3             -                                 u/u
lo               127.0.0.1/8                       u/u
                 ::1/128

設定モードに移行してLAN側、WAN側それぞれのアドレスを設定。
ONUからのグローバルIP取得はDHCPです。

vyos@vyos:~$ configure
vyos@vyos# set interfaces ethernet eth2 address 192.168.1.254/24
vyos@vyos# set interfaces ethernet eth3 address dhcp

SSHを有効にして今までの設定変更を反映。
これでターミナルソフトからSSH経由で接続できます。

vyos@vyos# set service ssh
vyos@vyos# commit

LAN→WANへの送信元NATのルールを作成。

vyos@vyos# set nat source rule 900 translation address masquerade
vyos@vyos# set nat source rule 900 source address 192.168.1.0/24
vyos@vyos# set nat source rule 900 outbound-interface eth3

DHCPサーバになる為の設定。
アドレスプールは 192.168.1.100-150

vyos@vyos# set service dhcp-server shared-network-name my_pool subnet 192.168.1.0/24
vyos@vyos# set service dhcp-server shared-network-name my_pool subnet 192.168.1.0/24 start 192.168.1.100 stop 192.168.1.150
vyos@vyos# set service dhcp-server shared-network-name my_pool subnet 192.168.1.0/24 default-router 192.168.1.254
vyos@vyos# set service dhcp-server shared-network-name my_pool subnet 192.168.1.0/24 dns-server 192.168.1.254

DNS転送の設定。

vyos@vyos# set service dns forwarding listen-on eth2

設定を保存して再起動。

vyos@vyos# commit
vyos@vyos# save
vyos@vyos# exit
vyos@vyos:~$ reboot

使えそうな確認コマンドなど

コンフィグの確認。

vyos@vyos:~$ show configuration

インターフェースの状態確認。

vyos@vyos:~$ show interfaces

ルーティングテーブルの確認。

vyos@vyos:~$ show ip route

NATルールの確認。

vyos@vyos:~$ show nat source rules

現在の送信元NATの状態を確認。

vyos@vyos:~$ show nat source translations detail

完成版コンフィグ

vyos@vyos:~$ show configuration
interfaces {
    ethernet eth2 {
        address 192.168.1.254/24
        duplex auto
        hw-id 00:0c:29:0a:a4:89
        smp_affinity auto
        speed auto
    }
    ethernet eth3 {
        address dhcp
        duplex auto
        hw-id 00:0c:29:0a:a4:93
        smp_affinity auto
        speed auto
    }
    loopback lo {
    }
}
nat {
    source {
        rule 900 {
            outbound-interface eth3
            source {
                address 192.168.1.0/24
            }
            translation {
                address masquerade
            }
        }
    }
}
service {
    dhcp-server {
        disabled false
        shared-network-name my_pool {
            authoritative disable
            subnet 192.168.1.0/24 {
                default-router 192.168.1.254
                dns-server 192.168.1.254
                lease 86400
                start 192.168.1.100 {
                    stop 192.168.1.150
                }
            }
        }
    }
    dns {
        forwarding {
            cache-size 150
            listen-on eth2
        }
    }
    ssh {
        port 22
    }
}
system {
    config-management {
        commit-revisions 20
    }
    console {
        device ttyS0 {
            speed 9600
        }
    }
    host-name vyos
    login {
        user vyos {
            authentication {
                encrypted-password ****************
                plaintext-password ****************
            }
            level admin
        }
    }
    ntp {
        server 0.pool.ntp.org {
        }
        server 1.pool.ntp.org {
        }
        server 2.pool.ntp.org {
        }
    }
    package {
        auto-sync 1
        repository community {
            components main
            distribution helium
            password ****************
            url http://packages.vyos.net/vyos
            username ""
        }
    }
    syslog {
        global {
            facility all {
                level notice
            }
            facility protocols {
                level debug
            }
        }
    }
    time-zone UTC
}

スループットの測定

回線速度計測サイトを使用して有線接続時の速度テストをしてみた結果。
※干渉をうけにくい有線接続でテスト。
・モデム—自宅のPC
下り:74Mbps  上り:4.5Mbps
・モデム—vyos—自宅のPC
下り:94Mbps  上り:5.6Mbps

無線アダプタを買ってAP設定をすれば高機能無線ルータとして実用的に使えるんじゃないか??
安定稼働するかどうかは分かりませんが。