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)
![](https://blog.kakaocdn.net/dn/caLdWf/btsMcf4wcxT/HRH1MYkZoATGdzM7Zf9FTK/img.png)
![](https://blog.kakaocdn.net/dn/cgNr4q/btsMcG8nEGS/lCHXuuviYDoQcF0715y1H1/img.png)
![](https://blog.kakaocdn.net/dn/DlQ8d/btsMcdr5DN5/aM1a1V7SQLGRZalEPknen1/img.png)
- vyos: tftp를 위한 dnat 설정
![](https://blog.kakaocdn.net/dn/bV3vcd/btsMcekcnPw/7V4KCUUjyLUIxd8I1vCZek/img.png)
- client 서버
![](https://blog.kakaocdn.net/dn/y1B7q/btsMb00H1nG/QJu0SxnmCUaxQejUtQxzm1/img.png)
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
![](https://blog.kakaocdn.net/dn/BAXg8/btsL9QcPkzU/m2cGGGPkI3rrcSx679ZD20/img.png)
- 클라이언트에서 외부 포트로 접속(DNAT)되는것을 확인
'AWS Cloud School 8기 > 서버가상화_클라우드 이미지' 카테고리의 다른 글
VyOS Firewall (0) | 2025.02.11 |
---|---|
ACL(ACcess-List) (0) | 2025.02.09 |
web + db + tomcat 실습(코드만) (3) | 2025.02.06 |
3-Tier Architecture (3계층 아키텍처)/ Reverse Proxy (리버스 프록시) (0) | 2025.02.06 |
Proxy[정방향 프록시 (Forward Proxy)], SSH (0) | 2025.02.05 |