본문 바로가기
AWS Cloud School 8기/서버가상화_클라우드 이미지

VyOS/ (VyOS nat 해제)

by YUNZEE 2025. 2. 6.
728x90

VyOS 란?

VyOS는 리눅스 기반의 오픈소스 라우터 & 방화벽 운영체제로 쉽게 말해, 네트워크 장비(Cisco, Juniper 같은 비싼 라우터) 없이도, 일반적인 PC나 가상머신에서 네트워크 기능(라우팅, 방화벽, NAT 등)을 제공하는 시스템이야.

💡 즉, VyOS는 소프트웨어로 네트워크 장비 역할을 대신하는 운영체제라고 보면 돼!


VyOS의 주요 기능

VyOS는 네트워크 장비에서 제공하는 기본적인 라우팅 및 보안 기능을 다 가지고 있어.

1. 라우터 기능 🛣️

  • 여러 네트워크를 연결해 주는 라우팅 기능 제공
  • 정적 라우팅(Static Routing), 동적 라우팅(OSPF, BGP, RIP) 지원

2. 방화벽 & 보안 기능 🔥

  • ACL(Access Control List)을 이용해 패킷 필터링/ 앞 블로그에서 배운 내용
  • Stateful 방화벽 (연결 추적 기능)
  • VPN (IPSec, OpenVPN, WireGuard 등) 지원

3. NAT(Network Address Translation) 기능 🔄

  • 공인 IP를 공유해서 내부 네트워크에서 인터넷 사용 가능
  • 포트포워딩, Source NAT(SNAT), Destination NAT(DNAT) 설정 가능/ 앞으로 배울 중요한 내용

4. 가상화 및 클라우드 지원 ☁️

  • KVM, VMware, VirtualBox 같은 가상 환경에서 실행 가능
  • AWS, Azure, GCP 같은 클라우드에서도 사용 가능

VyOS를 왜 써? (장점)

💡 VyOS가 좋은 이유!
무료 & 오픈소스 → Cisco, Juniper 같은 네트워크 장비 없이도 라우터 & 방화벽 기능 사용 가능
일반 PC에서도 사용 가능 → 라우터 장비 없이도 네트워크 실습 & 테스트 가능
CLI 환경 제공 → Cisco와 비슷한 명령어를 사용해서 배우기 쉽다
기업 환경에서도 사용 가능 → 고급 네트워크 설정까지 지원


VyOS를 어디서 사용해?

💡 VyOS는 이런 곳에서 쓰여!
✅ 네트워크 실습 & 교육 (CCNA, 네트워크 공부할 때)
✅ 가상화 환경에서 라우팅 & 방화벽 설정
✅ 클라우드 네트워크 관리 (AWS, GCP, Azure 등)
✅ 기업에서 VPN 서버 또는 방화벽 대체용으로 사용

 

실습

 

2 core 2GB 5GB

- vyos  운영체제 = 데비안 계열

- 설치가 되어있지 않은 상태. 처음에는 install image 해서 설치해야 한다.

install image

- GRUB: 리눅스의 부트로더

- 관리자 권한 설정 모드 

 

자주 쓰는 명령어

 

set : 설정

edit : 수정

delete : 삭제

 

commit : 설정 혹은 수정, 삭제한 내용들을 반영.

강사님 당부 말씀 1 : rollback 이 잘 안되고, 재부팅을 하면 기존 설정이 다 날아갈 수 있음. 약간 불안정함. 따라서 되도록이면 재부팅이나 종료를 안 하는 게 좋습니다. 

(넵!!!!!!!!!!!!!)

- 관리자 권한 설정 모드

- run = do

- eth0 = NIC의 장치명

-  설정(set) 인터페이스(int) 이더넷(eth) 이더넷 인터페이스이름(eth0)의 주소(add)

- 아직 반영하지 않은 편집 중인 모습

- set service ssh port 22

ssh라는 서비스의 포트를 22번으로 하겠다.

- commit

반영

 

인터페이스의 아이피 설정 및 ssh 포트를 정했기 때문에 xshell로 접속해 보자

 

xshell

vyos@vyos# set system gateway-address 211.183.3.2
vyos@vyos# commit

강사님 당부 말씀 2 : 앞으로 여러 개의 인터페이스를 만들고 설정할 텐데 꼭! 반드시! 하나씩 만들고-반영, 또 만들고-반영. 이렇게 차례차례 하세요.

ex) 장치 두 개 추가하고, 두개 설정하고. 이러지 마세요!!!!!!!!!

(넵!!!!!!!!!!!!!)

 

인터페이스를 추가한다는 것은: ets0. ets1, ets2... NIC

NIC: Network Interface Card = Network Adapter

 

- 두 번째 NIC를 물리적으로 vmnet 5번에 연결

논리적으로도 10.10.5.0 /24라는 대역에 내가 추가한 NIC(vmnet5)를 두고 싶기 때문에, 일단 해당 대역이 논리적으로 유효한지 확인.

vyos@vyos# set int eth eth1 add 10.10.5.250/24

vyos@vyos# commit

- vmnet5에 연결된 NIC

- VyOS의 eth1이 실제 vment5에 존재하는지 확인하고자, mint를 vmnet5에 두고 네트워크 설정 후 통신을 확인

- mint에서 eth1과 통신이 

 

- 비슷한 방식으로 vmnet6을 정의함

 

- VyOS에 NIC추가

- 추가된 인터페이스 확인

vyos@vyos# set int eth eth2 add 172.16.101.250/24

vyos@vyos# commit

 문제 1) 172.16.101.0 /24 대역에 web서버를 두고 vyos의 eth2와 통신이 되도록 해보세요

 

범위를 지정해 주기

vyos@vyos# set int eth eth0 description public
[edit] 
vyos@vyos# set int eth eth1 description private
[edit]
vyos@vyos# set int eth eth2 description dmz    
[edit]
vyos@vyos# commit

 

NAT 설정

NAT 

- 내부 네트워크(사설 IP)가 외부 네트워크(공인 IP)로 변환되어 인터넷과 통신할 수 있도록 하는 기술

 

private(10.10.5.0 /24)

vyos@vyos# set nat source rule 10 source address 10.10.5.0/24
- 출발지 대역 정의 (GNS3에서는 access-list로 정의)

vyos@vyos# set nat source rule 10 outbound-interface eth0    
- 외부로 나가는 인터페이스

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

- 변환 후의 주소

commit

- SNAT: 내부 네트워크에서 외부로 나갈 때 내부 IP를 공인 IP로 변환

 

DMZ(172.16.101.0/24)

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

[edit]  
vyos@vyos# set nat source rule 20 outbound-interface eth0       
[edit]
vyos@vyos# set nat source rule 20 translation address 211.183.3.250
[edit]
vyos@vyos# commit

- DMZ PAT후에 웹서버에서도 통신이 됨.

- nat 확인

- 외부로 나간 핑을 다시 돌아올 수 있게 해주는 설정

 

- nat를 해제하고 싶다면?

-> delete nat source rule 10

 

PAT 설정

PAT

- PAT는 NAT의 한 형태임

- 차이점은 NAT가 단순히 IP 주소만 변환하는 것과 달리, PAT는 포트 번호까지 변환해서 구분한다는 점

- ncpa.cpl에서 사라진 vm을 확인할 수 있음(vm 5, 6)

- 꼼수 통로가 사라짐

- 이로 인해 172.16.101.80으로 host-connetion 꼼수 접속을 할 수 없음

- DMZ에 존재하는 웹서버가 외부(211.183.3.0/24)에 web 서비스를 제공하려면 DNAT를 해야 됨  

 

DNAT 설정

DMZ의 웹서버

vyos@vyos# set nat destination rule 100 inbound-interface eth0
[edit]
vyos@vyos# set nat destination rule 100 translation address 172.16.101.80
[edit] # 172.16.101.80 웹서버
vyos@vyos# set nat destination rule 100 protocol tcp                  
[edit]
vyos@vyos# set nat destination rule 100 destination port 80
[edit]
vyos@vyos# commit

- eth0으로 유입되는, 목적지가 80 포트이며 tcp인 애들은 172.16.101.80으로 보내주겠음

 

 

- 브라우저에서 eth0의 주소를 찍으면 접속이 잘 된다. = DNAT가 잘 됐다.

문제) 현재 상황에서 VyOS와 DMZ의 웹서버에 ssh로 접속되도록 해보세요!
가장 쉽고 빠르게, 수단과 방법을 조금 가려서

방법 1) vyos의 ssh 서비스포트를 222번으로 수정 후 DNAT설정

vyos@vyos# set service ssh port 222
[edit]
vyos@vyos# commit
[ service ssh ]
Restarting OpenBSD Secure Shell server: sshd.

 

- DNAT 설정: eth0의 22번 포트를 목적지로 했을 때 웹서버의 동일한 포트로 연결

vyos@vyos# set nat destination rule 200 destination port 22
[edit]
vyos@vyos# set nat destination rule 200 inbound-interface eth0
[edit]
vyos@vyos# set nat destination rule 200 translation address 172.16.101.80
[edit]
vyos@vyos# set nat destination rule 200 protocol tcp
[edit]
vyos@vyos# commit

 

- web ip 수정

- 웹서버로 접속이 잘 됨

방법 2) web서버의 ssh포트를 수정 후 DNAT 설정

- destination 포트만 명시하면, translation포트는 destination 포트를 따라감

방법 3) DNAT를 할 때 목적지 포트와 translation 되는 포트를 컨트롤하는 방법

 ex) GNS3의 경우 ip nat inside source static tcp 172.16.101.80 80 211.183.3.250 8888

 이렇게 구성했다면, destination port : 8888 일 것이고 translation port 80번 일 것임

 따라서 nat destination의 rule을 설정할 때 해당 되는 옵션을 찾아서, 구성을 해주면 될 것 같음

 

ex) eth0의 2222를 destination port로 접근하는 대상을 web server의 22번 포트(translation port)로 들여보내주겠음

 

- 접속이 잘 됨

 

실습)
vyos2만 만들어서 eth0의 
222번 = vyos의 ssh 접속 (생략)
22번 = mint의 ssh 접속 (생략)
2222 = web의 ssh 접속 (생략)
5959 = web의 tftp 서버 접속
더보기

tftp 설치 및 검증

- web

[root@web ~]# yum install -y tftp-server

[root@web ~]# systemctl restart tftp

[root@web ~]# systemctl status firewalld

[root@web ~]# echo 'tftp test' > /var/lib/tftpboot/test.txt

- vyos  

vyos@vyos# set nat destination rule 500 protocol tcp

vyos@vyos# set nat destination rule 500 destination port 22

vyos@vyos# set nat destination rule 500 translation add 10.10.5.100

vyos@vyos# set nat destination rule 500 inbound-interface eth0

vyos@vyos# set service ssh port 222

 commit

- mint(ssh: 22)

- vyos: tftp를 위한 dnat 설정

- client  서버

vyos@vyos# delete nat destination 

vyos@vyos# commit

웹서버와 민트서버가 외부로 통신되는지 확인

 

- 외부에서 웹서버로 접속되도록 DNAT

(web 있는 존을 다 열어줌, 다 받을게/ 그래서 client서버가 web서버를 놀러갈 수 있음) 

vyos@vyos# set nat destination rule 100 inbound-interface eth0
[edit]
vyos@vyos# set nat destination rule 100 destination port 80   
[edit]
vyos@vyos# set nat destination rule 100 translation address 176.16.101.80
[edit]
vyos@vyos# set nat destination rule 100 translation port 80
[edit]
vyos@vyos# set nat destination rule 100 protocol tcp       
[edit]
vyos@vyos# commit

- 클라이언트에서 외부 포트로 접속(DNAT)되는것을 확인

 

 

728x90