前回、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アクセスできるようにする
仮想ネットワークの設定は以下の通り。VMnet3およびVMnet4はVyOS側でIPアドレスを払い出すため、ハイパーバイザのDHCP機能は有効化しない。
#(2)VyOSのインストールからSSH接続まで
##ダウンロードからOS起動まで
###イメージの入手
VyOSはこちらの「Downloading Rolling Release」から入手する。
2021/5/22現在、LTS版は無償ダウンロードできないので、Rolling Releaseをダウンロードする。
(私はvyos-1.4-rolling-202104290417-amd64.iso
をダウンロードしましたが、latestでもいいと思います)
###VMPlayerで起動
・インストーラディスクイメージファイルに先ほどダウンロードしたVyOSイメージファイルを選択
・ネットワークアダプタを設定するため、「ハードウェアをカスタマイズ」を選択
・一つ目のネットワークアダプタはVMnet0に設定し、「追加」を選択
・さらにネットワークアダプタ3も追加し、VMnet4も設定。その後「閉じる」
・ネットワークアダプタが3つ設定されていることを確認し、「完了」
##OS起動後の設定と、SSHアクセスするまで
###OS起動後の設定
・OS起動後、ログインID、パスワードを設定する。ここではいずれもVyOS
とする。
・ログイン完了。install image
と入力し、VyOSの設定を進める。何度か質問が飛んでくるが、最初Continue?
と聞かれたときにYesと答えるのと、何回かパスワードを聞かれる以外はEnter押しまくってればOK。(install image
をしないと、この後VyOSに入れる様々な設定が、再起動のたびに毎回消えてしまう。)
・show int
(もしくはshow interfaces
)と打つと、ネットワーク情報が表示される。現時点では、いずれのネットワークアダプタにもIPアドレスが振られていない。
###SSHアクセス
・IPアドレスの設定とSSHアクセスの設定をいれる。VyOSはConf (Configure)
で設定編集モードに入り、set
コマンドで設定を入れた後、commit
、save
でその設定を反映させる。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)
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アドレスが払い出されるよう、設定を入れる。
$ 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向けの設定も入れる。
# 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:~$ 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:~$
[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経由で接続可能。
[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クエリが投げられるように設定を入れる。
$ 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クエリが投げられることを確認。
[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経由でインターネットアクセスする構成をとる。
$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になっていて、インターネットにアクセスできることを確認する。
[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:~$ show nat source statistics
rule pkts bytes interface
---- ---- ----- ---------
100 344 25528 eth0
##Destination NAT
SNATでインターネットアクセス自体はできるようになったが、ゲストOS①にホストOSからVyOS経由でアクセスするためのDestination NATも追加で設定しておく。
$ 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アクセスできるようになったことを確認。
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# 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:~$ 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で仮想ルーター構築