6
4

More than 3 years have passed since last update.

VMware Playerでネットワークを学ぶ~②VyOS1.4を使ったDNS,DHCP,NATなど~

Last updated at Posted at 2021-05-22

前回、VMPlayerの仮想ネットワークの勉強をしましたが、それとオープンソースソフトウェアルータであるVyOSを使ってネットワーク周りの設定をやってみます。

<全3回でやろうと思っていること>
①VMware Playerの仮想ネットワーク設定
②VyOS1.4を使ったDNS,DHCP,NATなど ←今回はこれです。
 (1) 目標
 (2) VyOSのインストールからSSH接続まで
 (3) ntp, time-zone, dnsの設定
 (4) ゲストOSの接続(DHCP, DNS Forwarding)
 (5) ゲストOSのインターネットアクセス(NAT)
③VyOS1.4とAWS VPC間のSite-to-Site-VPN接続

<環境>
ホストOS: Windows10 20H2
ハイパーバイザ: VMware WorkStation 16 Player
ゲストOS①: CentOS 8
ゲストOS②: CentOS 7
仮想ルータ: VyOS 1.4

(1)目標

下記の図のように、ゲストOS間・ゲストOS-インターネット間の通信がVyOSを経由して行われる構成を作る。

  • ゲストOSは、DHCPの機能を持つVyOSからIPアドレスを払い出される
  • ゲストOSは、インターネット向きのDNSクエリをVyOS経由で実施する
  • ホストからゲストOSへ、VyOS経由でSSHアクセスできるようにする

image.png

仮想ネットワークの設定は以下の通り。VMnet3およびVMnet4はVyOS側でIPアドレスを払い出すため、ハイパーバイザのDHCP機能は有効化しない。
image.png

(2)VyOSのインストールからSSH接続まで

ダウンロードからOS起動まで

イメージの入手

VyOSはこちらの「Downloading Rolling Release」から入手する。
2021/5/22現在、LTS版は無償ダウンロードできないので、Rolling Releaseをダウンロードする。
(私はvyos-1.4-rolling-202104290417-amd64.isoをダウンロードしましたが、latestでもいいと思います)

VMPlayerで起動

・「新規仮想マシンの作成」を選択
image.png

・インストーラディスクイメージファイルに先ほどダウンロードしたVyOSイメージファイルを選択
image.png

・ゲストOSはDebian 9.x 64ビットに設定
image.png

・仮想マシンの名前は適当に決めて「次へ」を選択
image.png

・ディスク容量はデフォルトのまま「次へ」
image.png

・ネットワークアダプタを設定するため、「ハードウェアをカスタマイズ」を選択
image.png

・一つ目のネットワークアダプタはVMnet0に設定し、「追加」を選択
image.png

・ネットワークアダプタを選択し、「完了」
image.png

・追加されたネットワークアダプタ2はVMnet3に設定
image.png

・さらにネットワークアダプタ3も追加し、VMnet4も設定。その後「閉じる」
image.png

・ネットワークアダプタが3つ設定されていることを確認し、「完了」
image.png

・完了後に仮想マシンを再生すると、VyOSが起動する。
image.png

OS起動後の設定と、SSHアクセスするまで

OS起動後の設定

・OS起動後、ログインID、パスワードを設定する。ここではいずれもVyOSとする。
image.png

・ログイン完了。install imageと入力し、VyOSの設定を進める。何度か質問が飛んでくるが、最初Continue?と聞かれたときにYesと答えるのと、何回かパスワードを聞かれる以外はEnter押しまくってればOK。(install imageをしないと、この後VyOSに入れる様々な設定が、再起動のたびに毎回消えてしまう。)

show int(もしくはshow interfaces)と打つと、ネットワーク情報が表示される。現時点では、いずれのネットワークアダプタにもIPアドレスが振られていない。
image.png

SSHアクセス

・IPアドレスの設定とSSHアクセスの設定をいれる。VyOSはConf (Configure)で設定編集モードに入り、setコマンドで設定を入れた後、commitsaveでその設定を反映させる。exitを押すと、通常モードに戻る。

$ conf
[edit]

!eth0にDHCPでアドレスが振られるよう設定。
#set interfaces ethernet eth0 address dhcp

!VyOSにsshでアクセスできるようにする。
#set service ssh

#commit
[edit]
#save
Saving configration to '/config/config.boot'...
Done
[edit]
#exit
exit

!再起動
#reboot

!再起動後に再度ネットワーク情報を確認
$show int
Codes: S - State, L - Link, u - Up, D - Down, A - Admin Down
Interface        IP Address                        S/L  Description
---------        ----------                        ---  -----------
eth0             192.168.11.25/24                  u/u  
eth1             -                                 u/u  
eth2             -                                 u/u  
lo               -                                 u/u
                 ::1/128

!eth0にいれたdhcp設定の詳細も確認可能。
$ show dhcp client leases
interface  : eth0
ip address : 192.168.11.25      [Active]
subnet mask: 255.255.255.0
router     : 192.168.11.1
name server: 192.168.11.1
dhcp server: 192.168.11.1
lease time : 172800
last update: Sat May 22 07:56:03 JST 2021
expiry     : Mon May 24 07:56:01 JST 2021
reason     : BOUND

interface  : eth1
last update: Sun May 16 11:57:37 JST 2021
reason     : RELEASE

interface  : eth2
last update: Sun May 16 11:57:39 JST 2021
reason     : RELEASE

ちなみに、設定を入れるときはset ~だが、削除するときは`delete ~'となる。

$ conf

![例]間違えてeth1にdhcp設定を入れてしまった場合
# delete interfaces ethernet eth1 address dhcp

#commit
#save
#exit

・上記のようにeth0にアドレスが振られていれば、Teraterm等でsshアクセスが可能となる。(ID/PWはvyos/vyos)
image.png

show conf (configuration)で設定した内容を確認することが可能(eth0にdhcp設定、serviceにsshが追加されている)。/config/config.bootファイルを表示している。

$show conf
interfaces {
    ethernet eth0 {
        address dhcp
        hw-id 00:0c:29:0c:de:9b
    }
    ethernet eth1 {
        hw-id 00:0c:29:0c:de:a5
    }
    ethernet eth2 {
        hw-id 00:0c:29:0c:de:af
    }
    loopback lo {
    }
}
service {
    ssh {
    }
}
system {
    config-management {
        commit-revisions 100
    }
    console {
        device ttyS0 {
            speed 115200
        }
    }
    host-name vyos
    login {
        user vyos {
            authentication {
                encrypted-password ****************
                plaintext-password ****************
            }
        }
    }
    syslog {
        global {
            facility all {
                level info
            }
            facility protocols {
                level debug
            }
        }
    }
}

(3)ntp, time-zone, dnsの設定

ルータ機能とは関係ないが、各種設定を入れる。

$ conf

!ntpの設定
# set system ntp server 'ntp.nict.jp'

!time-zoneの設定
# set system time-zone 'Asia/Tokyo'

!DNSの設定
# set system name-server '192.168.11.1'

# commit
# save
# exit

$ 

問題なく設定されていることを確認。

vyos@vyos:~$ date
Sat 22 May 2021 04:24:08 PM JST
vyos@vyos:~$ host www.google.com
www.google.com has address 172.217.25.68
www.google.com has IPv6 address 2404:6800:4004:809::2004
vyos@vyos:~$

(4)ゲストOSの接続(DHCP, DNS Forwarding)

DHCP

ゲストOSが接続できるよう、DHCPの設定を入れる。
まずはeth0~2の設定を入れるところから。(これを先にやらないとDHCPがうまく設定されないので要注意
あと、VyOS 1.3までと一部設定の仕方が違うので要注意

$ conf

!仮想ネットワークエディタで定義したセグメントのアドレスを設定
# set interfaces ethernet eth1 address '192.168.88.1/24'
# set interfaces ethernet eth2 address '192.168.153.1/24'

!各ネットワークインターフェースの説明を追記
# set interfaces ethernet eth0 description 'VMNet0,Bridge,Internet'
# set interfaces ethernet eth1 description 'VMNet3'
# set interfaces ethernet eth2 description 'VMNet4'

# commit
# save
# exit

!設定内容の確認
$ show int
Codes: S - State, L - Link, u - Up, D - Down, A - Admin Down
Interface        IP Address                        S/L  Description
---------        ----------                        ---  -----------
eth0             192.168.11.25/24                  u/u  VMNet0,Bridge,Internet
eth1             192.168.88.1/24                   u/u  VMNet3
eth2             192.168.153.1/24                  u/u  VMNet4
lo               127.0.0.1/8                       u/u
                 ::1/128

VMNet3のサーバ(一番上の図で言うゲストOS①)にIPアドレスが払い出されるよう、設定を入れる。

VyOS
$ conf

!VMNet3dhcpという名前を付けて、セグメントとデフォルトルートを定義
# set service dhcp-server shared-network-name VMNet3dhcp subnet 192.168.88.0/24 default-router '192.168.88.1'

!DNSサーバをVyOSに設定(後でForwardingの設定もいれる)
# set service dhcp-server shared-network-name VMNet3dhcp subnet 192.168.88.0/24 dns-server '192.168.88.1'

!ネットワークの名称を設定
# set service dhcp-server shared-network-name VMNet3dhcp subnet 192.168.88.0/24 domain-name 'vmnet3.local'

!DHCPアドレスのリース時間を設定(デフォルトでは86400秒=一日)
# set service dhcp-server shared-network-name VMNet3dhcp subnet 192.168.88.0/24 lease '600'

!DHCPで払い出すアドレスレンジがどこからどこまでかを設定(rangeのidを複数設定することも可能)
# set service dhcp-server shared-network-name VMNet3dhcp subnet 192.168.88.0/24 range 0 start '192.168.88.128'
# set service dhcp-server shared-network-name VMNet3dhcp subnet 192.168.88.0/24 range 0 stop '192.168.88.191'

同様にVMNet4向けの設定も入れる。

VyOS
# set service dhcp-server shared-network-name VMNet4dhcp subnet 192.168.153.0/24 default-router '192.168.153.1'
# set service dhcp-server shared-network-name VMNet4dhcp subnet 192.168.153.0/24 dns-server '192.168.153.1'
# set service dhcp-server shared-network-name VMNet4dhcp subnet 192.168.153.0/24 domain-name 'vmnet4.local'
# set service dhcp-server shared-network-name VMNet4dhcp subnet 192.168.153.0/24 lease '600'
# set service dhcp-server shared-network-name VMNet4dhcp subnet 192.168.153.0/24 range 1 start '192.168.153.128'
# set service dhcp-server shared-network-name VMNet4dhcp subnet 192.168.153.0/24 range 1 stop '192.168.153.159'
# commit
# save
# exit

設定完了後、dhcpの設定が正しく入っているか、VyOS、ゲストOSそれぞれで確認。

VyOS

!いくつアドレスを払い出しているか確認
vyos@vyos:~$ show dhcp server statistics
Pool          Size    Leases    Available  Usage
----------  ------  --------  -----------  -------
VMNet3dhcp      64         1           63  2%
VMNet4dhcp      32         1           31  3%

!払い出しているアドレス情報を確認
vyos@vyos:~$ show dhcp server leases
IP address       Hardware address    State    Lease start          Lease expiration     Remaining    Pool        Hostname
---------------  ------------------  -------  -------------------  -------------------  -----------  ----------  ----------
192.168.88.128   00:0c:29:b7:82:04   active   2021/05/22 17:13:09  2021/05/22 17:23:09  0:08:32      VMNet3dhcp  centos8-01
192.168.153.131  00:0c:29:d3:0e:2a   active   2021/05/22 17:12:53  2021/05/22 17:22:53  0:08:16      VMNet4dhcp  centos7-01

vyos@vyos:~$
ゲストOS①(CentOS-8)
[root@centos8-01 ~]# nmcli c
NAME                UUID                                  TYPE      DEVICE
Wired connection 1  54cdd836-be91-3ea8-973e-9bec0b08b1b3  ethernet  ens37
ens33               8c8833cf-8288-431c-b0da-4b3ed621805e  ethernet  ens33
virbr0              6348881d-417c-44ea-936d-13cb34b1af76  bridge    virbr0
[root@centos8-01 ~]# 
[root@centos8-01 ~]# 
[root@centos8-01 ~]# nmcli c show 54cdd836-be91-3ea8-973e-9bec0b08b1b3 | grep IP4
IP4.ADDRESS[1]:                         192.168.88.128/24
IP4.GATEWAY:                            192.168.88.1
IP4.ROUTE[1]:                           dst = 0.0.0.0/0, nh = 192.168.88.1, mt = 101
IP4.ROUTE[2]:                           dst = 192.168.88.0/24, nh = 0.0.0.0, mt = 101
IP4.DNS[1]:                             192.168.88.1
IP4.DOMAIN[1]:                          vmnet3.local
[root@centos8-01 ~]#

VMNet4も同様の手順で接続確認をしておく。

ちなみに、この時点でゲストOS①と②がVyOS経由で接続可能。

ゲストOS①
[root@centos8-01 ~]# ping 192.168.153.131
PING 192.168.153.131 (192.168.153.131) 56(84) bytes of data.
64 bytes from 192.168.153.131: icmp_seq=1 ttl=63 time=2.80 ms
64 bytes from 192.168.153.131: icmp_seq=2 ttl=63 time=4.41 ms
64 bytes from 192.168.153.131: icmp_seq=3 ttl=63 time=13.8 ms
64 bytes from 192.168.153.131: icmp_seq=4 ttl=63 time=4.92 ms
^C
--- 192.168.153.131 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 18ms
rtt min/avg/max/mdev = 2.802/6.485/13.810/4.301 ms
[root@centos8-01 ~]#

DNS Forwarding

上記で、DHCPでアドレスが払い出されたサーバのDNS向き先も設定されているが、それをそのままフォワーディングして、ゲストOSから外部にDNSクエリが投げられるように設定を入れる。

VyOS
$ conf

!DNSクエリのアクセス元を設定
# set service dns forwarding allow-from '192.168.88.0/24'
# set service dns forwarding allow-from '192.168.153.0/24'

!どのネットワークインターフェースをlisten状態にするか設定
# set service dns forwarding listen-address '192.168.88.1'
# set service dns forwarding listen-address '192.168.153.1'

!フォワード先を設定
# set service dns forwarding name-server '192.168.11.1'

# commit
# save
# exit

ゲストOS①からDNSクエリが投げられることを確認。

ゲストOS①
[root@centos8-01 ~]# host www.google.com
www.google.com has address 172.217.24.132
www.google.com has IPv6 address 2404:6800:4004:818::2004
[root@centos8-01 ~]#

ゲストOS②からも同様にDNSクエリが投げられることを確認しておく。

(5)ゲストOSのインターネットアクセス(NAT)

Source NAT (SNAT)、Destination NAT (DNAT)それぞれの設定をいれる。

Source NAT

ゲストOS①はインターネットと直接つながっていないため、VyOSルータのアドレスでNATして、VyOS経由でインターネットアクセスする構成をとる。

VyOS
$conf

!NAT設定の説明を入れる
# set nat source rule 100 description 'SNAT from VMNet3 to external'

!eth0からインターネットに出るように設定
# set nat source rule 100 outbound-interface 'eth0'

!NAT元のアドレスレンジを設定
# set nat source rule 100 source address '192.168.88.0/24'

!NAT後のアドレスを設定(ここではVyOSのアドレスでマスカレードする設定をいれている)
# set nat source rule 100 translation address 'masquerade'

# commit
# save
# exit

ゲストOSのデフォルトゲートウェイがVyOSになっていて、インターネットにアクセスできることを確認する。

ゲストOS①
[root@centos8-01 ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.88.1    0.0.0.0         UG    101    0        0 ens37
192.168.25.0    0.0.0.0         255.255.255.0   U     100    0        0 ens33
192.168.88.0    0.0.0.0         255.255.255.0   U     101    0        0 ens37
192.168.122.0   0.0.0.0         255.255.255.0   U     0      0        0 virbr0

[root@centos8-01 ~]# ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=118 time=10.8 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=118 time=10.3 ms
64 bytes from 8.8.8.8: icmp_seq=3 ttl=118 time=12.2 ms
64 bytes from 8.8.8.8: icmp_seq=4 ttl=118 time=15.2 ms
^C
--- 8.8.8.8 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 15ms
rtt min/avg/max/mdev = 10.319/12.144/15.220/1.912 ms

VyOS側でSNATをどれくらいしているかも確認可能。

VyOS
vyos@vyos:~$ show nat source statistics

rule      pkts        bytes   interface
----      ----        -----   ---------

100        344        25528   eth0

Destination NAT

SNATでインターネットアクセス自体はできるようになったが、ゲストOS①にホストOSからVyOS経由でアクセスするためのDestination NATも追加で設定しておく。

VyOS
$ conf

!DNATの説明を入れる
# set nat destination rule 1 description 'DNAT from external to VMNet3-centos8-01'

!VyOSにアクセスするときのポート番号を設定
# set nat destination rule 1 destination port '10022'

!VyOSにアクセスしてくる元のネットワークインターフェースを設定
# set nat destination rule 1 inbound-interface 'eth0'

!DNATのプロトコルを指定
# set nat destination rule 1 protocol 'tcp'

!NAT変換後のアドレス、ポートを設定
# set nat destination rule 1 translation address '192.168.88.128'
# set nat destination rule 1 translation port '22'

# commit
# save
# exit

ホストOSからゲストOS①にSSHアクセスできるようになったことを確認。

ホストOS
PS C:\Users\flets> ssh -p10022 admin@192.168.11.25
admin@192.168.11.25's password:
Activate the web console with: systemctl enable --now cockpit.socket

Last login: Sat May 22 01:26:56 2021 from 192.168.25.1
[admin@centos8-01 ~]$

まとめ

今回はVyOSを使って色々なネットワーク設定をやってみました。
やっぱり自分で設定してみると理解が深まります。

ちなみに、設定コマンド全文はconfigで設定編集モードにした後に下記コマンドで確認可能。

VyOS
vyos@vyos# run show conf com
set interfaces ethernet eth0 address 'dhcp'
set interfaces ethernet eth0 description 'VMNet0,Bridge,Internet'
set interfaces ethernet eth0 hw-id '00:0c:29:0c:de:9b'
set interfaces ethernet eth1 address '192.168.88.1/24'
(以下略)

あと、config全文をはっておきます。

VyOS
vyos@vyos:~$ show conf
interfaces {
    ethernet eth0 {
        address dhcp
        description VMNet0,Bridge,Internet
        hw-id 00:0c:29:0c:de:9b
    }
    ethernet eth1 {
        address 192.168.88.1/24
        description VMNet3
        hw-id 00:0c:29:0c:de:a5
    }
    ethernet eth2 {
        address 192.168.153.1/24
        description VMNet4
        hw-id 00:0c:29:0c:de:af
    }
    loopback lo {
    }
}
nat {
    destination {
        rule 1 {
            description "DNAT from external to VMNet3-centos8-01"
            destination {
                port 10022
            }
            inbound-interface eth0
            protocol tcp
            translation {
                address 192.168.88.128
                port 22
            }
        }
    }
    source {
        rule 100 {
            description "SNAT from VMNet3 to external"
            outbound-interface eth0
            source {
                address 192.168.88.0/24
            }
            translation {
                address masquerade
            }
        }
    }
}
service {
    dhcp-server {
        shared-network-name VMNet3dhcp {
            subnet 192.168.88.0/24 {
                default-router 192.168.88.1
                dns-server 192.168.88.1
                domain-name vmnet3.local
                lease 600
                range 0 {
                    start 192.168.88.128
                    stop 192.168.88.191
                }
            }
        }
        shared-network-name VMNet4dhcp {
            subnet 192.168.153.0/24 {
                default-router 192.168.153.1
                dns-server 192.168.153.1
                domain-name vmnet4.local
                lease 600
                range 1 {
                    start 192.168.153.128
                    stop 192.168.153.159
                }
            }
        }
    }
    dns {
        forwarding {
            allow-from 192.168.88.0/24
            allow-from 192.168.153.0/24
            listen-address 192.168.88.1
            listen-address 192.168.153.1
            name-server 192.168.11.1
        }
    }
    ssh {
    }
}
system {
    config-management {
        commit-revisions 100
    }
    console {
        device ttyS0 {
            speed 115200
        }
    }
    host-name vyos
    login {
        user vyos {
            authentication {
                encrypted-password ****************
                plaintext-password ****************
            }
        }
    }
    name-server 192.168.11.1
    ntp {
        server 0.pool.ntp.org {
        }
        server 1.pool.ntp.org {
        }
        server 2.pool.ntp.org {
        }
    }
    syslog {
        global {
            facility all {
                level info
            }
            facility protocols {
                level debug
            }
        }
    }
    time-zone Asia/Tokyo
}

参考

VyOS 1.4のConfigration Guide
【VyOS】VyOSでDHCPサーバを設定してみた その1 基本設定
VyOS の基本設定 (DHCP/DNS/NAT/Firewall/その他)
ESXi内のルーティングに必須!VyOSで仮想ルーター構築

6
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
4