KVM VyOSのインストールと設定(ver 1.1.8)

・公式情報
https://wiki.vyos-users.jp/
https://wiki.vyos.net/

・インストール

# qemu-img create -f qcow2 /usr/local/var/lib/libvirt/images/vyos.qcow2 2G

# virt-install \
  --connect qemu:///system  \
  --name vyos \
  --vcpus 1 \
  --ram 512 \
  --network bridge=br0 \
  --network bridge=br1 \
  --file /usr/local/var/lib/libvirt/images/vyos.qcow2 \
  --cdrom /usr/local/src/vyos-1.1.8-amd64.iso \
  --nographics

install image
reboot

・コンソールから接続

# virsh console vyos

・設定の確認、変更、保存

show configuration
show configuration commands

configure  ※設定モードに変更
set ...    ※値を設定
delete ... ※値を削除

compare 0  ※直近の設定と比較
commit     ※設定を反映
save       ※設定を保存
exit       ※設定モードから抜ける

SSHの設定

set service ssh port '22'

タイムゾーン設定

set system time-zone Asia/Tokyo

date

・ネットワーク構成

(インターネット) - [ [pppoe 0] [eth1] ] - VyOS - [eth0] - (内部セグメント)

・内部インターフェースの設定

set interfaces ethernet eth0 description 'INSIDE'
set interfaces ethernet eth0 address '192.168.0.1/24'
set interfaces ethernet eth0 duplex 'auto'
set interfaces ethernet eth0 speed 'auto'

・外部インターフェースの設定(PPPoE)

set interfaces ethernet eth1 description 'OUTSIDE'
set interfaces ethernet eth1 pppoe 0
set interfaces ethernet eth1 pppoe 0 user-id [ユーザー名]
set interfaces ethernet eth1 pppoe 0 password [パスワード]
set interfaces ethernet eth1 pppoe 0 default-route auto
set interfaces ethernet eth1 pppoe 0 name-server auto

show interfaces pppoe

・MTU調整

set policy route PPPoE-IN rule 10 protocol tcp
set policy route PPPoE-IN rule 10 set tcp-mss 1414
set policy route PPPoE-IN rule 10 tcp flags SYN
set interfaces ethernet eth0 policy route PPPoE-IN
set interfaces ethernet eth1 pppoe 0 policy route PPPoE-IN

DHCPサーバ設定とDNSフォワーダ設定

set service dhcp-server disabled 'false'
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.10 stop '192.168.0.50'

set service dns forwarding cache-size '0'
set service dns forwarding listen-on 'eth0'
set service dns forwarding name-server '8.8.8.8'  ※PPPoEで取得したDNSサーバ以外に問い合わせをしたい場合は設定
set service dns forwarding name-server '8.8.4.4'  ※PPPoEで取得したDNSサーバ以外に問い合わせをしたい場合は設定

・SrcNAT設定(内部→外部)

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

※下記を指定して、内部からインターネットに疎通できるようにする
 ・SrcNATの対象となる送信元アドレス
 ・SrcNAT後のアドレス(masquerade を指定すればVyOSが可変アドレスに対応してくれる)
 ・インターネット側と通信するインターフェース

・DstNAT設定(外部→内部 ポートフォワード)

set nat destination rule 1 protocol 'tcp_udp'
set nat destination rule 1 inbound-interface 'eth1'
set nat destination rule 1 destination port '5501'
set nat destination rule 1 translation address '192.168.0.107'

※eth1 5501ポートあての通信を 192.168.0.107 に転送する

ファイアウォール設定の考え方

・「ポリシーセット」を作成して「インターフェース」の「out、in、local」のどれかに割り当てる
・out … インターフェースを通過して、出て行く通信
・in … インターフェースを通過して、入ってくる通信
・local … インターフェース自身への通信

ファイアウォール設定(外部→VyOS)

set firewall name OUT_LOCAL default-action 'drop'
set firewall name OUT_LOCAL rule 10 action 'accept'
set firewall name OUT_LOCAL rule 10 state established 'enable'
set firewall name OUT_LOCAL rule 10 state related 'enable'

set interfaces ethernet eth1 pppoe 0 firewall local name 'OUT_LOCAL'

※上記ポリシーセットを外部向けインターフェースのlocalに割り当てて
 「VyOS自身が起点となる通信とその折り返し通信は許可、それ以外は拒否」にする。
※pppoeインターフェースにも適用すること。
 適用しないとVyOS自身のSSH等のポートがインターネットに解放されてしまう。

ファイアウォール設定(外部→内部)

set firewall name OUT_IN default-action 'drop'
set firewall name OUT_IN rule 10 action 'accept'
set firewall name OUT_IN rule 10 state established 'enable'
set firewall name OUT_IN rule 10 state related 'enable'
set firewall name OUT_IN rule 20 action 'accept'
set firewall name OUT_IN rule 20 protocol 'tcp_udp'
set firewall name OUT_IN rule 20 destination port '5501'
set firewall name OUT_IN rule 20 state new 'enable'

set interfaces ethernet eth1 pppoe 0 firewall in name 'OUT_IN'

※上記ポリシーセットを外部向けインターフェースのinに割り当てて
 「折り返し通信、および5501ポート宛の通信は許可、それ以外は拒否」にする。
※pppoeインターフェースにも適用すること。

ファイアウォール設定(内部→外部)

※内部が起点となる通信で、拒否したいものがあれば設定する