본문 바로가기

Technical/Network

VirtualBox 에 Vyatta 라우터로 VM 가상 네트워크 구성하기


노트북에 서로 다른 사설IP 대역(노트북의 랜카드와 동일한 브리징 네트워크의 IP가 아닌, 내부 사설 네트워크)로 가상네트워크를 구성해서 VM을 만들 경우가 있다. 이 경우 대개 고정IP와 함께 고정된 default gateway를 설정하게 되는데, 사무실과 집을 오가다 보면 매번 VM들의 default gateway를 변경해 주어야 한다.


이런 번거로움을 피하기 위해 VirtualBox 내에 Vyatta Router VM을 만들고, 각 VM들의 사설 IP대역에 맞는 interface(eth1, eth2, eth3, ...)를 각각 설정한 다음, VM에서는 Vyatta Router의 interface IP를 default gateway 로 설정해 둔다. 물론 Vyatta Router의 eth0는 인터넷이 가능한 IP 대역으로 Bridged Network로 구성하고, eth1/eth2/eth3 으로부터 eth0로 라우팅을 해 주어야 각 VM에서 Vyatta Router를 통해 외부로 접속이 가능할 것이다.


이 방법을 응용한다면 VMWare용 Vyatta Router Virtual Appliance나 다른 가상화 솔루션들을 사용할 경우나, Vyatta Router를 사용한 간단한 내부 네트워크를 동적으로 구성할 때도 도움이 될 만 하겠다.


아래에 그 방법에 대해 정리해 둔다.




Vyatta Router VM의 설치


  • Vyos.io 사이트에서 http://packages.vyos.net/iso/release/1.1.7/ 로 접속하여 iso 파일(vyos-1.1.7-amd64.iso)을 다운로드
    - 필요에 따라 다른 iso를 골라서 설치 사용하거나 ova 파일 자체를 appliance로 올려서 쓸수도 있다 
  • Virtual Box에서 linux 머신(OtherLinux/64bit, CPU1, Ram 512, Disk 2GB)을 생성하고 ISO파일을 CD에 장착하고 vyos 로그인 후, 'install images'로 Vyatta OS를 설치
    - VirtualBox에서의 VM 생성과 설치 방법에 대해서는 따로 설명하지 않는다
  • 사용할 네트워크에 맞게 네트워크 장치(NIC)를 생성한다. 위 그림에서와 같이 작업을 하려면 다음의 구성정보와 그림을 참고한다
    - 어댑터1: 브리지 어댑터 또는 NAT 네트워크, 무작위 모드: 모두 허용
    - 어댑터2, 3, 4: 호스트 전용 어댑터(사전에 만든 호스트 전용 네트워크 이름 지정, vboxnet0/MacOS 또는 Host-Only Ethernet Adapter/Windows 등), 무작위 모드: 모두 또는 가상머신에 허용, 어댑터종류:아무거나...반가상네트워크도 가능)


어댑터2,3,4는 모두 동일하게 설정



Vyatta Router Interface 및 라우팅 설정



  • Vyos 설치가 완료되면 Vyatta VM을 끄고, VirtualBox 저장소의 iso 이미지를 제거하고 리부트한 후, 기본 설정된 관리자 계정 vyos(암호: vyos) 로 로그인한다
  • 초기 설정에 대해 configure, set 등의 명령으로 각각 인터페이스 생성과 설정을 수행하고 확인한다. configure 이후의 설정을 저장하려면 commit 다음에 save 를 반드시 하여야 한다
  • IP 변경 후, 네트워크가 작동하지 않는다면 VirtualBox의 VM Network 설정의 MAC 주소를 확인하여 VyOS의 /config/config.boot 의 hw-id 부분을 맞추고 VyOS를 리부트해야 할 수도 있다

vyos@vyos:~$ configure

vyos@vyos# set interfaces ethernet eth0 description OUTSIDE

vyos@vyos# set interfaces ethernet eth0 address 192.168.0.201/16

vyos@vyos# set system gateway-address 192.168.0.1

vyos@vyos# set system domain-name test.local

vyos@vyos# set service ssh port '22'

vyos@vyos# commit

vyos@vyos# save

Saving configuration to '/config/config.boot'...

vyos@vyos# exit

vyos@vyos:~$ show interfaces
Codes: S - State, L - Link, u - Up, D - Down, A - Admin Down
Interface        IP Address                        S/L  Description
---------        ----------                        ---  -----------
eth0             192.168.0.201/16                  u/u  OUTSIDE
lo               127.0.0.1/8                       u/u  
                 ::1/128
vyos@vyos:~$ 
vyos@vyos:~$ configure
vyos@vyos# set interfaces ethernet eth1 description 10-NETWORK
vyos@vyos# set interfaces ethernet eth1 address 10.255.10.1/24
vyos@vyos# set interfaces ethernet eth2 description 20-NETWORK
vyos@vyos# set interfaces ethernet eth2 address 10.255.20.1/24
vyos@vyos# set interfaces ethernet eth3 description 30-NETWORK
vyos@vyos# set interfaces ethernet eth3 address 10.255.30.1/24
vyos@vyos# commit

vyos@vyos# save

Saving configuration to '/config/config.boot'...

vyos@vyos# exit

vyos@vyos:~$ show interfaces
Codes: S - State, L - Link, u - Up, D - Down, A - Admin Down
Interface        IP Address                        S/L  Description
---------        ----------                        ---  -----------
eth0             192.168.0.201/16                  u/u  OUTSIDE 
eth1             10.255.10.1/24                    u/u  10-NETWORK 
eth2             10.255.20.1/24                    u/u  20-NETWORK 
eth3             10.255.30.1/24                    u/u  30-NETWORK 
lo               127.0.0.1/8                       u/u  
                 ::1/128


  • 내부 사설망과 연결되는 개별 router 포트(eth1, eth2, eth3) 에 대해 다음과 같이 설정하고 저장한다

내부 사설망과 연결되는 개별 router port(eth1, 2, 3)에 대해 다음과 같이 설정한다

vyos@vyos:~$ configure

vyos@vyos# set nat source rule 10 source address 10.255.10.0/24

vyos@vyos# set nat source rule 10 outbound-interface eth0

vyos@vyos# set nat source rule 10 protocol 'all'

vyos@vyos# set nat source rule 10 translation address masquerade

vyos@vyos# set nat source rule 20 source address 10.255.20.0/24

vyos@vyos# set nat source rule 20 outbound-interface eth0

vyos@vyos# set nat source rule 20 protocol 'all'

vyos@vyos# set nat source rule 20 translation address masquerade

vyos@vyos# set nat source rule 30 source address 10.255.30.0/24

vyos@vyos# set nat source rule 30 outbound-interface eth0

vyos@vyos# set nat source rule 30 protocol 'all'

vyos@vyos# set nat source rule 30 translation address masquerade

vyos@vyos# commit

vyos@vyos# save

Saving configuration to '/config/config.boot'...

vyos@vyos# show nat source rule 10

 outbound-interface eth0

 protocol all

 source {

     address 10.255.10.0/24

 }

 translation {

     address masquerade

 }

[edit]

vyos@vyos# exit


  • Router의 정상작동은, 내부 사설망을 사용할 VM(네트워크 어댑터는 호스트 전용, Vyatta Router 의 eth1 등과 동일한 방식의 어댑터)을 생성하고 default gateway를 10.255.10.1  등 Router port의 IP로 설정하여 외부 인터넷으로 ping 이 도달되는지 확인해 보면 된다
  • Vyatta Router를 재시작하기 위해서는 명령어 상태에서 reboot 명령어를, 끄기 위해서는 단순히 poweroff 명령어를 실행한다
[참고] Windows 10(VirtualBox 5.2.18, Vyatta 어댑터1=NAT Network)의 경우, 정상적으로 설정을 완료하였음에도 내부 VM(10.255.10.*) 네트워크에서 외부로 접속이 되지 않는 경우가 있는데(VM에서 gateway 즉 10.255.10.1, vyatta에서 NAT gateway 및 외부까지는 정상), 이 때는 vyatta 콘솔 터미널에서 해당 VM의 ip로 ping 을 수행하면 해결되는 경우가 있다(2018/08/25).

사설망 외부에서 내부로의 직접 접근(Port Forwarding)

  • 공유기를 통한 외부에서 내부로의 접근 방식과 동일한 개념으로 Port fordwarding을 설정하면 된다
  • 설정 방법과 과정을 예로 들어보면 아래와 같다(192.168.0.201:65022 -> 10.255.10.100:22, TCP/UDP DNAT 포워딩)
vyos@vyos:~$ configure
vyos@vyos# set nat destination rule 100 description PORT_FORWARD_TEST
vyos@vyos# set nat destination rule 100 destination address '192.168.0.201'
vyos@vyos# set nat destination rule 100 destination port 65022
vyos@vyos# set nat destination rule 100 inbound-interface 'eth0'
vyos@vyos# set nat destination rule 100 protocol tcp_udp
vyos@vyos# set nat destination rule 100 translation address '10.255.10.100'
vyos@vyos# set nat destination rule 100 translation port '22'
vyos@vyos# commit
vyos@vyos# save
Saving configuration to '/config/config.boot'...
vyos@vyos# show nat destination rule 100
 description SIP_FORWARD_TEST
 destination {
     address 192.168.0.201
     port 65022
 }
 inbound-interface eth0
 protocol tcp_udp
 translation {
     address 10.255.10.100
     port 22
 }
[edit]
vyos@vyos# exit


네트워크 대역에 DHCP 설정하기

* 필요에 따라 특정 대역에 대해 DHCP를 설정해야 할 필요가 있을 경우 다음과 같이 설정한다(추가: 2017-09)
vyos@vyos:~$ configure
vyos@vyos# set service dhcp-server shared-network-name NET10_POOL subnet 10.255.10.0/24 start 10.255.10.2 stop 10.255.10.80
vyos@vyos# set service dhcp-server shared-network-name NET10_POOL subnet 10.255.10.0/24 default-router 10.255.10.1
vyos@vyos# set service dhcp-server shared-network-name NET10_POOL subnet 10.255.10.0/24 dns-server 10.255.10.100
vyos@vyos# commit
vyos@vyos# save
vyos@vyos# show service dhcp-server
 shared-network-name NET10_POOL {
     authoritative disable
     subnet 10.255.10.0/24 {
         default-router 10.255.10.1
         dns-server 10.255.10.100
         lease 86400
         start 10.255.10.2 {
             stop 10.255.10.80
         }
     }
 }
[edit]
vyos@vyos# exit


한 걸음 더...

  • 노트북을 사용하는 네트워크 환경이 바뀌었는데 Vyatta Router의 eth0 주소와 각 포트의 라우팅 정보를 수시로 바꿔 주어야 하는 것은 상당히 불편하고 귀찮은 일일 것이다. 사실 본 글의 라우팅 구조를 생각해 낼 떄부터 이 내용을 결론으로 쓰기 위한 것이었는데 ...... 
    - VirtualBox VM관리 화면에서 Vyatta Router VM을 끈 후 복제(Vyatta Router Home 등의  다른 이름으로)
    - 복제할 때 Mac 주소를 자동생성하게(default이지만, 확인 필요) 설정, 단 다음 단계에서 링크가 아닌 '완전한 복제' 실행


     - 새로 만들어진 Vyatta Router VM에 로그인하여, 앞서 수행했던 configure 과정과 비슷한 내용을 다시 수행하는 것이 아니라 vi등의 편집기로 /config/config.boot 내용 중 원하는 부분(외부와 연결되는 eth0 네트워크 정보, default gateway, 4개의 NIC에 대한 MAC 주소-VirtualBox에서 자동할당한 MAC 주소)를 수정하고 reboot 하면 된다. 참고로 아래에 config.boot 파일의 수정해야 할 부분을 붉은 글씨로 따로 표시하였다


vyos@vyos:~$ cat /config/config.boot 

interfaces {

    ethernet eth0 {

        address 192.168.219.201/24

        description OUTSIDE

        duplex auto

        hw-id 08:00:27:8e:73:7a

        smp_affinity auto

        speed auto

    }

    ethernet eth1 {

        address 10.255.10.1/24

        description 10-NETWORK

        duplex auto

        hw-id 08:00:27:b5:91:0e

        smp_affinity auto

        speed auto

    }

    ethernet eth2 {

        address 10.255.20.1/24

        description 20-NETWORK

        duplex auto

        hw-id 08:00:27:6b:38:52

        smp_affinity auto

        speed auto

    }

    ethernet eth3 {

        address 10.255.30.1/24

        description 30-NETWORK

        duplex auto

        hw-id 08:00:27:60:d7:dd

        smp_affinity auto

        speed auto

    }

    loopback lo

...

}

nat {

    destination {

        rule 100 {

            description PORT_FORWARD_TEST

            destination {

                address 192.168.219.201

                port 65022

            }

            inbound-interface eth0

            protocol tcp_udp

            translation {

                address 10.255.10.100

                port 22

            }

        }

        rule 101 {

            description FORWARD_OSMASTER

            destination {

                address 192.168.219.201

                port 60160

            }

            inbound-interface eth0

            protocol tcp_udp

            translation {

                address 10.255.10.160

                port 22

            }

        }

...

    }

    source {

        rule 10 {

            outbound-interface eth0

            protocol all

            source {

                address 10.255.10.0/24

            }

            translation {

                address masquerade

            }

        }

        rule 20 {

            outbound-interface eth0

            protocol all

            source {

                address 10.255.20.0/24

            }

            translation {

                address masquerade

            }

        }

        rule 30 {

            outbound-interface eth0

            protocol all

            source {

                address 10.255.30.0/24

            }

            translation {

                address masquerade

            }

        }

    }

}

service {

    ssh {

        port 22

    }

}

system {

    config-management {

        commit-revisions 20

    }

    domain-name test.local

    gateway-address 192.168.219.1

    host-name vyos

...

vyos@vyos:~$ 



  • 이렇게 한다면, 업무 환경의 네트워크에 따라 Vyatta Router만 바꿔서 사용하므로, 수시로 업무 환경에 따라 VM의 네트워크 정보를 바꿔 주어야 했던 불편함은 깔끔하게 해결되지 않을까 한다



- Barracuda -