<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>snowfairy</title><description>Blog</description><link>https://snowfairy.kr/</link><language>en</language><item><title>[서버 구축 소전] 3차시 과제</title><link>https://snowfairy.kr/posts/%EC%84%9C%EB%B2%84-%EA%B5%AC%EC%B6%95-%EC%86%8C%EC%A0%84-3%EC%B0%A8%EC%8B%9C-%EA%B3%BC%EC%A0%9C/</link><guid isPermaLink="true">https://snowfairy.kr/posts/%EC%84%9C%EB%B2%84-%EA%B5%AC%EC%B6%95-%EC%86%8C%EC%A0%84-3%EC%B0%A8%EC%8B%9C-%EA%B3%BC%EC%A0%9C/</guid><description>[서버 구축 소전] 3차시 과제</description><pubDate>Fri, 12 Jun 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;이번 글에서는, 서버 구축 3차시 과제인 &lt;code&gt;가상화 기술을 사용하는 기술 사례&lt;/code&gt;에 대해 다루었다.&lt;/p&gt;
&lt;h2&gt;1. 기업 선정 이유&lt;/h2&gt;
&lt;p&gt;이번 과제에서 내가 선택한 기업은 &lt;strong&gt;네이버클라우드&lt;/strong&gt;이다.&lt;/p&gt;
&lt;p&gt;네이버클라우드는 국내 IT 기업인 네이버 계열의 클라우드 서비스 기업으로, &lt;code&gt;Server&lt;/code&gt;, &lt;code&gt;Storage&lt;/code&gt;, &lt;code&gt;Network&lt;/code&gt;, &lt;code&gt;Database&lt;/code&gt; 등 다양한 클라우드 인프라 서비스를 제공한다.&lt;/p&gt;
&lt;p&gt;내가 이 기업을 선택한 이유는 &lt;strong&gt;가상화 기술과 직접적인 관련이 큰 기업&lt;/strong&gt;이기 때문이다.
일반적인 서비스 기업도 내부적으로 서버와 컨테이너를 사용하지만, 네이버클라우드는 &lt;strong&gt;가상화된 서버 환경 자체를 고객에게 제공하는 기업&lt;/strong&gt;이다.&lt;/p&gt;
&lt;p&gt;따라서 수업에서 배운 &lt;code&gt;Hypervisor&lt;/code&gt;, &lt;code&gt;Virtual Machine&lt;/code&gt;, &lt;code&gt;Host OS&lt;/code&gt;, &lt;code&gt;Guest OS&lt;/code&gt;, &lt;code&gt;Container&lt;/code&gt; 개념을 기업 사례와 연결하기에 적합하다고 생각했다.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;2. 기업명과 사용하는 가상화 기술&lt;/h2&gt;
&lt;p&gt;네이버클라우드는 클라우드 서비스를 제공하기 위해 여러 형태의 가상화 기술을 사용한다.
대표적으로는 &lt;strong&gt;서버 가상화&lt;/strong&gt;와 &lt;strong&gt;컨테이너 기반 가상화&lt;/strong&gt;가 있다.&lt;/p&gt;
&lt;h3&gt;2-1. 서버 가상화&lt;/h3&gt;
&lt;p&gt;네이버클라우드에서는 사용자가 물리 서버를 직접 구매하지 않고도 클라우드 환경에서 서버를 생성하고 사용할 수 있다.&lt;/p&gt;
&lt;p&gt;사용자는 필요한 만큼의 &lt;code&gt;CPU&lt;/code&gt;, &lt;code&gt;Memory&lt;/code&gt;, &lt;code&gt;Storage&lt;/code&gt; 사양을 선택해 서버 인스턴스를 만들 수 있다.
이러한 방식은 하나의 물리 서버 자원을 여러 사용자 또는 여러 서비스가 나누어 사용하는 구조이므로, &lt;code&gt;Hypervisor&lt;/code&gt; 기반 가상화와 관련이 있다.&lt;/p&gt;
&lt;p&gt;즉, 네이버클라우드의 서버 서비스는 &lt;strong&gt;물리 서버를 논리적으로 나누어 여러 개의 가상 서버처럼 사용하는 방식&lt;/strong&gt;이라고 볼 수 있다.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Physical Server
↓
Hypervisor
↓
Virtual Machine
↓
Guest OS
↓
Application
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;위 구조에서 &lt;code&gt;Hypervisor&lt;/code&gt;는 물리 하드웨어의 자원을 여러 &lt;code&gt;Virtual Machine&lt;/code&gt;에 나누어 제공하는 역할을 한다.
각 &lt;code&gt;Virtual Machine&lt;/code&gt;은 독립된 &lt;code&gt;Guest OS&lt;/code&gt;를 가지고 동작하므로 서로 분리된 서버처럼 사용할 수 있다.&lt;/p&gt;
&lt;h3&gt;2-2. 컨테이너 기반 가상화&lt;/h3&gt;
&lt;p&gt;네이버클라우드 같은 클라우드 환경에서는 가상 머신뿐만 아니라 &lt;code&gt;Container&lt;/code&gt; 기반 가상화도 활용될 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Container&lt;/code&gt;는 애플리케이션과 실행에 필요한 환경을 하나로 묶어 격리된 공간에서 실행하는 기술이다.
가상 머신처럼 &lt;code&gt;Guest OS&lt;/code&gt; 전체를 포함하지 않고, &lt;code&gt;Host OS&lt;/code&gt;의 커널을 공유한다.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Host OS
↓
Container Runtime
↓
Container
↓
Application
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;이 방식은 &lt;code&gt;VM&lt;/code&gt;보다 가볍고 실행 속도가 빠르다는 장점이 있다.
컨테이너는 &lt;code&gt;chroot&lt;/code&gt;, &lt;code&gt;cgroup&lt;/code&gt;, &lt;code&gt;namespace&lt;/code&gt; 같은 기능을 통해 격리된 실행 환경을 만든다.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;chroot    → 파일 시스템 접근 범위 제한
cgroup    → CPU, Memory 등 자원 사용량 제한
namespace → 프로세스, 네트워크, 마운트 정보 등 격리
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;따라서 네이버클라우드가 사용하는 가상화 기술은 다음과 같이 정리할 수 있다.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;- VM 기반 서버 가상화
- Hypervisor를 통한 물리 자원 분배
- Container 기반 애플리케이션 실행 환경
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h2&gt;3. 해당 기업이 그 기술을 선택한 이유&lt;/h2&gt;
&lt;p&gt;네이버클라우드가 가상화 기술을 사용하는 이유는 크게 네 가지로 볼 수 있다.&lt;/p&gt;
&lt;h3&gt;3-1. 자원 효율성&lt;/h3&gt;
&lt;p&gt;가장 큰 이유는 &lt;strong&gt;자원 효율성&lt;/strong&gt;이다.&lt;/p&gt;
&lt;p&gt;클라우드 서비스는 여러 고객이 필요한 만큼 서버 자원을 사용하고 비용을 지불하는 방식이다.
만약 고객마다 물리 서버를 하나씩 따로 제공한다면 서버 구매 비용, 전력 비용, 냉각 비용, 운영 비용이 크게 증가한다.&lt;/p&gt;
&lt;p&gt;하지만 가상화 기술을 사용하면 하나의 물리 서버 위에서 여러 개의 가상 서버를 운영할 수 있다.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;물리 서버 1대
→ 가상 서버 여러 개 생성
→ 여러 사용자 또는 서비스가 나누어 사용
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;이 구조를 통해 하드웨어 자원을 더 효율적으로 사용할 수 있다.&lt;/p&gt;
&lt;h3&gt;3-2. 비용 절감&lt;/h3&gt;
&lt;p&gt;두 번째 이유는 &lt;strong&gt;비용 절감&lt;/strong&gt;이다.&lt;/p&gt;
&lt;p&gt;서버를 직접 구축하려면 물리 장비를 구매해야 하고, 서버실 공간, 전력, 냉각 장치, 유지보수 인력도 필요하다.
하지만 클라우드 사업자는 가상화 기술을 통해 물리 서버 자원을 여러 고객에게 나누어 제공할 수 있다.&lt;/p&gt;
&lt;p&gt;사용자 입장에서도 필요한 만큼만 서버를 사용하고 비용을 지불할 수 있기 때문에 초기 비용 부담이 줄어든다.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;기존 방식
→ 물리 서버 구매
→ 설치 및 운영
→ 사용량이 적어도 비용 발생

가상화 기반 클라우드 방식
→ 필요한 만큼 서버 생성
→ 사용한 만큼 비용 지불
→ 자원 낭비 감소
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;3-3. 격리성과 안정성&lt;/h3&gt;
&lt;p&gt;세 번째 이유는 &lt;strong&gt;격리성과 안정성&lt;/strong&gt;이다.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Virtual Machine&lt;/code&gt;은 각각 독립된 &lt;code&gt;Guest OS&lt;/code&gt; 환경을 가진다.
따라서 한 가상 서버에서 문제가 발생하더라도 다른 가상 서버에 영향을 줄 가능성이 낮다.&lt;/p&gt;
&lt;p&gt;클라우드 환경에서는 여러 고객의 서버가 같은 물리 장비 위에서 실행될 수 있다.
이때 각 고객의 환경이 제대로 분리되지 않으면 보안 문제나 장애 전파 문제가 생길 수 있다.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;고객 A의 VM
고객 B의 VM
고객 C의 VM
→ 같은 물리 서버 위에 있어도 서로 분리되어야 함
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;따라서 &lt;code&gt;Hypervisor&lt;/code&gt; 기반 가상화는 클라우드 서비스에서 중요한 역할을 한다.&lt;/p&gt;
&lt;p&gt;컨테이너 역시 &lt;code&gt;namespace&lt;/code&gt;, &lt;code&gt;cgroup&lt;/code&gt; 등을 활용해 실행 환경을 격리한다.
다만 컨테이너는 &lt;code&gt;Host OS Kernel&lt;/code&gt;을 공유하기 때문에 일반적으로 VM보다 격리 수준은 낮다고 볼 수 있다.&lt;/p&gt;
&lt;h3&gt;3-4. 빠른 배포와 유연성&lt;/h3&gt;
&lt;p&gt;네 번째 이유는 &lt;strong&gt;빠른 배포와 유연성&lt;/strong&gt;이다.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;VM&lt;/code&gt;은 운영체제 단위로 환경을 구성할 수 있기 때문에 다양한 서버 환경을 만들기 쉽다.
예를 들어 &lt;code&gt;Linux&lt;/code&gt; 서버, &lt;code&gt;Windows&lt;/code&gt; 서버, 테스트용 서버, 운영용 서버를 각각 분리해서 사용할 수 있다.&lt;/p&gt;
&lt;p&gt;또한 &lt;code&gt;Container&lt;/code&gt;는 애플리케이션과 실행 환경을 하나의 패키지처럼 묶을 수 있다.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Application
+ Library
+ Config
+ Runtime
= Container Image
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;이렇게 하면 개발 환경과 운영 환경의 차이를 줄일 수 있고, 같은 애플리케이션을 여러 서버에서 더 쉽게 실행할 수 있다.&lt;/p&gt;
&lt;p&gt;즉, 네이버클라우드는 클라우드 서비스를 안정적으로 제공하기 위해 &lt;strong&gt;VM 기반 가상화와 컨테이너 기반 가상화의 장점을 함께 활용&lt;/strong&gt;한다고 볼 수 있다.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;4. 내가 같은 상황이라면 동일한 기술을 선택할 것인지&lt;/h2&gt;
&lt;p&gt;내가 네이버클라우드와 같은 상황이라면 &lt;strong&gt;동일하게 VM과 Container를 함께 사용하는 방식을 선택할 것&lt;/strong&gt;이다.&lt;/p&gt;
&lt;p&gt;그 이유는 두 기술의 장점이 서로 다르기 때문이다.&lt;/p&gt;
&lt;h3&gt;4-1. VM을 선택할 이유&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;Virtual Machine&lt;/code&gt;은 &lt;code&gt;Guest OS&lt;/code&gt;를 포함한 독립적인 실행 환경을 제공한다.
그래서 격리성과 보안 측면에서 강점이 있다.&lt;/p&gt;
&lt;p&gt;클라우드 서비스에서는 서로 다른 고객의 서버가 같은 물리 서버 위에서 실행될 수 있다.
이때 고객별 서버 환경이 제대로 분리되지 않으면 보안 문제가 발생할 수 있다.&lt;/p&gt;
&lt;p&gt;따라서 클라우드 인프라에서는 &lt;strong&gt;VM 기반의 강한 격리성&lt;/strong&gt;이 필요하다고 생각한다.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;VM의 장점
- Guest OS를 포함한 독립 환경 제공
- 격리성이 강함
- 다양한 OS 실행 가능
- 고객별 서버 환경 분리에 적합
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;4-2. Container를 선택할 이유&lt;/h3&gt;
&lt;p&gt;반면 &lt;code&gt;Container&lt;/code&gt;는 VM보다 가볍고 실행 속도가 빠르다.
애플리케이션 단위로 실행 환경을 묶을 수 있고, 같은 자원에서 더 많은 서비스를 실행할 수 있다.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Container의 장점
- Guest OS가 필요 없음
- 실행 속도가 빠름
- 자원 사용량이 적음
- 애플리케이션 배포에 유리함
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;즉, &lt;code&gt;VM&lt;/code&gt;은 안정성과 보안에 강하고, &lt;code&gt;Container&lt;/code&gt;는 속도와 효율성에 강하다.&lt;/p&gt;
&lt;h3&gt;4-3. 최종 판단&lt;/h3&gt;
&lt;p&gt;그래서 나는 둘 중 하나만 선택하기보다는 &lt;strong&gt;VM과 Container를 함께 사용하는 방식&lt;/strong&gt;을 선택할 것이다.&lt;/p&gt;
&lt;p&gt;컨테이너만 사용하는 것은 현실적으로 위험할 수 있다.
컨테이너는 &lt;code&gt;Host OS Kernel&lt;/code&gt;을 공유하기 때문에 VM보다 격리 수준이 낮을 수 있다.&lt;/p&gt;
&lt;p&gt;반대로 VM만 사용하면 격리성은 좋지만, 컨테이너보다 무겁고 배포 속도가 느릴 수 있다.&lt;/p&gt;
&lt;p&gt;따라서 클라우드 인프라처럼 보안과 안정성이 중요한 환경에서는 다음과 같은 구조가 현실적이라고 생각한다.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Physical Server
↓
Hypervisor
↓
Virtual Machine
↓
Container
↓
Application
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;이 구조는 VM의 &lt;strong&gt;격리성&lt;/strong&gt;과 컨테이너의 &lt;strong&gt;배포 효율성&lt;/strong&gt;을 함께 활용할 수 있다.&lt;/p&gt;
&lt;p&gt;결론적으로 내가 같은 상황이라면 &lt;strong&gt;VM 기반 가상화로 안정성과 격리성을 확보하고, Container로 배포 속도와 자원 효율성을 높이는 방식&lt;/strong&gt;을 선택할 것이다.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;마치며&lt;/h2&gt;
&lt;p&gt;이번 기업 사례 분석을 통해 Hypervisor, VM, Container 같은 가상화 개념이 단순히 이론으로만 쓰이는 것이 아니라 실제 클라우드 기업의 핵심 기술로 활용된다는 점을 알 수 있었습니다.&lt;/p&gt;
&lt;p&gt;특히 네이버클라우드처럼 많은 사용자에게 서버 자원을 제공하는 기업에서는 자원 효율성, 격리성, 비용 절감, 빠른 배포가 중요하다는 것을 이해할 수 있었습니다.&lt;/p&gt;
&lt;p&gt;수업에서 배운 내용을 실제 기업 사례와 연결해보니 가상화 기술이 왜 필요한지 더 현실적으로 느낄 수 있었고, 이후 클라우드나 서버 인프라를 공부할 때도 도움이 될 것 같습니다.&lt;/p&gt;
</content:encoded></item><item><title>[서버 구축 소전] 2차시 과제</title><link>https://snowfairy.kr/posts/%EC%84%9C%EB%B2%84-%EA%B5%AC%EC%B6%95-%EC%86%8C%EC%A0%84-2%EC%B0%A8%EC%8B%9C-%EA%B3%BC%EC%A0%9C/</link><guid isPermaLink="true">https://snowfairy.kr/posts/%EC%84%9C%EB%B2%84-%EA%B5%AC%EC%B6%95-%EC%86%8C%EC%A0%84-2%EC%B0%A8%EC%8B%9C-%EA%B3%BC%EC%A0%9C/</guid><description>[서버 구축 소전] 2차시 과제</description><pubDate>Sun, 07 Jun 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;오늘은 &lt;code&gt;RDP의 통신 방식&lt;/code&gt;에 대해 다뤄 보도록 하겠습니다.&lt;em&gt;(과제 설명에 따라 서버 구축은 진행하지 않음)&lt;/em&gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;/p&gt;
&lt;h1&gt;RDP란?&lt;/h1&gt;
&lt;p&gt;&lt;code&gt;RDP(Remote Desktop Protocol)&lt;/code&gt;은 원격 데스크탑 프로토콜입니다.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;RDP&lt;/code&gt;는 &lt;strong&gt;원격 컴퓨터의 화면 정보는 내 컴퓨터로&lt;/strong&gt; 보내고, &lt;strong&gt;내 컴퓨터의 키보드, 마우스 등의 입력 정보는 원격 컴퓨터로&lt;/strong&gt; 보내는 프로토콜입니다.&lt;/p&gt;
&lt;hr /&gt;
&lt;h1&gt;RDP 통신&lt;/h1&gt;
&lt;p&gt;&lt;code&gt;RDP&lt;/code&gt;는 기본적으로 &lt;strong&gt;클라이언트-서버 구조&lt;/strong&gt;로 동작합니다.&lt;br /&gt;
여기서 &lt;strong&gt;클라이언트는 접속하는 쪽 컴퓨터고, 서버는 접속을 받는 쪽 컴퓨터&lt;/strong&gt;입니다.&lt;/p&gt;
&lt;p&gt;:::div{class=&quot;white-code&quot;}&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;[내 컴퓨터 / RDP 클라이언트]
        │
        │ 키보드 입력, 마우스 입력 전송
        ▼
[원격 컴퓨터 / RDP 서버]

[원격 컴퓨터 / RDP 서버]
        │
        │ 화면 정보, 소리, 파일, 클립보드 정보 전송
        ▼
[내 컴퓨터 / RDP 클라이언트]
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;RDP의 기본 포트&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;RDP&lt;/code&gt;는 기본적으로 &lt;strong&gt;TCP 3389번&lt;/strong&gt; 포트를 사용합니다.&lt;br /&gt;
다만, 보안상 이유로 실제 서버에서는 3389번 포트를 그대로 외부에 열어두지 않는 경우가 많다고 합니다.&lt;/p&gt;
&lt;h2&gt;RDP 통신 방식&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;RDP&lt;/code&gt;는 단순히 화면 전체를 계속 동영상처럼 전송하는 방식이 아닙니다.&lt;br /&gt;
실제로는 &lt;strong&gt;더 효율적&lt;/strong&gt;으로 동작합니다.&lt;/p&gt;
&lt;p&gt;내 컴퓨터에서 발생한 키보드 입력이나 마우스 클릭 같은 &lt;strong&gt;조작 정보가 원격 컴퓨터로&lt;/strong&gt; 전달되고, 원격 컴퓨터는 그 결과로 &lt;strong&gt;바뀐 화면을 다시 내 컴퓨터에&lt;/strong&gt; 보여줍니다.&lt;/p&gt;
&lt;p&gt;즉, &lt;strong&gt;사용자의 입력은 클라이언트에서 서버로&lt;/strong&gt; 가고, 처리 결과인 &lt;strong&gt;화면 변화는 서버에서 클라이언트로&lt;/strong&gt; 돌아오는 구조입니다.
또한 필요에 따라 클립보드, 파일 전송, 소리, 프린터, 로컬 드라이브 공유 같은 데이터도 함께 주고받을 수 있습니다.&lt;/p&gt;
&lt;h2&gt;RDP 접속 과정&lt;/h2&gt;
&lt;p&gt;RDP 접속은 단순히 원격 화면을 바로 보여주는 방식이 아닙니다.&lt;br /&gt;
먼저 클라이언트와 서버가 연결을 만들고, 보안 설정과 사용자 인증을 거친 뒤 원격 세션이 생성됩니다.&lt;br /&gt;
그 이후부터 사용자의 입력 정보와 서버의 화면 변화 정보가 계속 오가면서 원격 제어가 이루어집니다.&lt;/p&gt;
&lt;h3&gt;1단계: 클라이언트가 서버에 접속 요청&lt;/h3&gt;
&lt;p&gt;사용자 컴퓨터의 원격 데스크탑 프로그램이 원격 서버에 3389번 포트로 &lt;strong&gt;접속을 시도&lt;/strong&gt;합니다.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;클라이언트 -&amp;gt; 서버
&quot;RDP 접속 요청&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;이 단계에서는 클라이언트가 서버에게 &lt;strong&gt;원격 데스크톱 연결을 시작하겠다고 요청&lt;/strong&gt;하는 것입니다.&lt;br /&gt;
서버에서 RDP 접속이 허용되어 있고, 방화벽에서 3389번 포트가 막혀 있지 않다면 다음 단계로 넘어갑니다.&lt;/p&gt;
&lt;h3&gt;2단계: 보안 연결 설정&lt;/h3&gt;
&lt;p&gt;서버가 접속 요청을 받아들이면, 클라이언트와 서버는 먼저 &lt;strong&gt;보안 연결을 설정&lt;/strong&gt;합니다.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;RDP&lt;/code&gt;가 주고 받는 데이터가 암호화되지 않은 상태로 전송되면 중간에서 정보가 노출될 수 있기 때문에, 실제 원격 제어가 시작되기 전에 &lt;strong&gt;암호화 통신&lt;/strong&gt;을 위한 설정을 진행합니다.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;클라이언트 &amp;lt;-&amp;gt; 서버
&quot;암호화 방식과 보안 설정 협상&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;요즘 RDP는 보통 &lt;code&gt;TLS&lt;/code&gt; 같은 암호화 방식을 사용해 데이터를 보호합니다.&lt;br /&gt;
이 과정을 통해 이후에 오가는 입력 정보나 화면 정보가 쉽게 노출되지 않도록 합니다.&lt;/p&gt;
&lt;h3&gt;3단계: 사용자 인증&lt;/h3&gt;
&lt;p&gt;보안 연결이 준비되면 서버는 접속하려는 &lt;strong&gt;사용자가 정상 사용자인지 확인&lt;/strong&gt;합니다.&lt;/p&gt;
&lt;p&gt;사용자는 보통 사용자 이름, 비밀번호, 도메인 정보 등을 입력합니다.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;클라이언트 -&amp;gt; 서버
&quot;사용자 이름 / 비밀번호 / 도메인 정보 전송&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;서버는 입력된 계정 정보가 올바른지 확인하고, 해당 계정이 원격 데스크톱 접속 권한을 가지고 있는지도 검사합니다.&lt;br /&gt;
계정 정보가 틀렸거나 원격 접속 권한이 없다면 접속은 거부됩니다.&lt;/p&gt;
&lt;p&gt;또한 &lt;code&gt;NLA(Network Level Authentication)&lt;/code&gt;가 활성화되어 있으면, 원격 데스크톱 세션을 완전히 만들기 전에 먼저 사용자 인증을 진행합니다.&lt;br /&gt;
즉, 인증되지 않은 사용자가 불필요하게 원격 세션을 생성하지 못하게 막는 역할을 합니다.&lt;/p&gt;
&lt;h3&gt;4단계: 원격 세션 생성&lt;/h3&gt;
&lt;p&gt;인증이 성공하면 서버는 해당 사용자를 위한 &lt;strong&gt;원격 데스크톱 세션&lt;/strong&gt;을 만듭니다.&lt;br /&gt;
세션은 원격 컴퓨터 안에서 사용자가 작업할 수 있는 독립적인 작업 공간이라고 볼 수 있습니다.&lt;/p&gt;
&lt;p&gt;사용자는 이 세션 안에서 바탕화면을 보고, 프로그램을 실행하거나 파일을 열 수 있습니다.&lt;br /&gt;
이때 서버는 사용자의 접속 환경도 함께 설정합니다.&lt;/p&gt;
&lt;p&gt;예를 들어 아래 같은 정보가 세션 설정에 포함될 수 있습니다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;화면 해상도&lt;/li&gt;
&lt;li&gt;색상 품질&lt;/li&gt;
&lt;li&gt;키보드 설정&lt;/li&gt;
&lt;li&gt;오디오 사용 여부&lt;/li&gt;
&lt;li&gt;클립보드 공유 여부&lt;/li&gt;
&lt;li&gt;프린터 공유 여부&lt;/li&gt;
&lt;li&gt;로컬 드라이브 연결 여부&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;즉, RDP는 단순히 화면 하나만 연결하는 것이 아니라, 사용자가 원격 컴퓨터를 어떤 환경에서 사용할지에 대한 설정까지 맞춥니다.&lt;/p&gt;
&lt;h3&gt;5단계: 가상 채널 설정&lt;/h3&gt;
&lt;p&gt;원격 세션이 생성되면 &lt;code&gt;RDP&lt;/code&gt;는 여러 종류의 데이터를 처리하기 위해 &lt;strong&gt;가상 채널&lt;/strong&gt;을 설정합니다.&lt;/p&gt;
&lt;p&gt;가상 채널은 쉽게 말해 하나의 RDP 연결 안에서 기능별 데이터를 나누어 주고받는 &lt;strong&gt;통로&lt;/strong&gt;입니다.&lt;br /&gt;
화면 정보, 키보드 입력, 마우스 입력, 클립보드, 오디오, 프린터, 드라이브 공유 데이터는 서로 성격이 다르기 때문에 기능별로 나누어 처리하는 것입니다.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;RDP 연결
├─ 화면 출력 채널
├─ 키보드 / 마우스 입력 채널
├─ 클립보드 채널
├─ 오디오 채널
├─ 프린터 공유 채널
└─ 드라이브 공유 채널
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;이 구조 덕분에 RDP는 단순히 화면만 보여주는 것이 아니라, 복사·붙여넣기, 파일 전송, 소리 출력, 프린터 공유 같은 기능도 함께 제공할 수 있습니다.&lt;/p&gt;
&lt;h3&gt;6단계: 입력 정보 전송&lt;/h3&gt;
&lt;p&gt;이 단계부터 본격적인 &lt;strong&gt;원격 제어&lt;/strong&gt;가 이루어집니다.&lt;/p&gt;
&lt;p&gt;사용자가 마우스를 움직이거나 키보드를 입력하면, 클라이언트는 그 조작 정보를 서버로 전송합니다.&lt;br /&gt;
이때 클라이언트가 보내는 것은 화면이 아니라 &lt;strong&gt;사용자의 입력 정보&lt;/strong&gt;입니다.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;클라이언트 -&amp;gt; 서버
&quot;마우스 좌표, 클릭 정보, 키보드 입력 정보 전송&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;예를 들어 사용자가 원격 화면에서 메모장을 클릭하면, 클라이언트는 마우스 좌표와 클릭 정보를 서버로 보냅니다.&lt;br /&gt;
사용자가 키보드로 글자를 입력하면 어떤 키가 눌렸는지에 대한 정보가 서버로 전달됩니다.&lt;/p&gt;
&lt;p&gt;서버는 이 입력을 실제 원격 컴퓨터에서 발생한 입력처럼 처리합니다.&lt;/p&gt;
&lt;h3&gt;7단계: 화면 변화 정보 전송&lt;/h3&gt;
&lt;p&gt;서버는 클라이언트로부터 받은 입력을 처리한 뒤, 그 결과로 바뀐 화면 정보를 다시 클라이언트에게 전송합니다.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;서버 -&amp;gt; 클라이언트
&quot;변경된 화면 정보 전송&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;여기서 중요한 점은 &lt;code&gt;RDP&lt;/code&gt;가 화면 전체를 계속 영상처럼 보내는 방식이 아니라는 것입니다.&lt;br /&gt;
화면 전체를 매번 보내면 네트워크 사용량이 커지고 속도도 느려집니다.&lt;/p&gt;
&lt;p&gt;그래서 RDP는 가능한 한 &lt;strong&gt;변경된 화면 부분 중심으로 정보&lt;/strong&gt;를 보냅니다.&lt;br /&gt;
예를 들어 메모장에 글자 하나를 입력했다면 전체 화면을 다시 보내는 것이 아니라, 글자가 추가된 부분이나 창의 변화 정보를 중심으로 전송합니다.&lt;/p&gt;
&lt;p&gt;이런 방식 덕분에 네트워크 사용량을 줄이고 원격 조작의 반응 속도를 높일 수 있습니다.&lt;/p&gt;
&lt;h3&gt;8단계: 입력과 화면 정보의 반복 교환&lt;/h3&gt;
&lt;p&gt;RDP 세션이 유지되는 동안 입력 정보와 화면 변화 정보는 계속 반복해서 오갑니다.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;사용자 입력 발생
-&amp;gt; 클라이언트가 입력 정보를 서버로 전송
-&amp;gt; 서버가 입력 처리
-&amp;gt; 서버가 바뀐 화면 정보를 클라이언트로 전송
-&amp;gt; 클라이언트가 화면 갱신
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;이 과정이 매우 짧은 시간 안에 계속 반복되기 때문에 사용자는 원격 컴퓨터를 직접 사용하는 것처럼 느끼게 됩니다.&lt;/p&gt;
</content:encoded></item><item><title>[서버 구축 소전] 1차시 과제</title><link>https://snowfairy.kr/posts/%EC%84%9C%EB%B2%84-%EA%B5%AC%EC%B6%95-%EC%86%8C%EC%A0%84-1%EC%B0%A8%EC%8B%9C-%EA%B3%BC%EC%A0%9C/</link><guid isPermaLink="true">https://snowfairy.kr/posts/%EC%84%9C%EB%B2%84-%EA%B5%AC%EC%B6%95-%EC%86%8C%EC%A0%84-1%EC%B0%A8%EC%8B%9C-%EA%B3%BC%EC%A0%9C/</guid><description>[서버 구축 소전] 1차시 과제</description><pubDate>Thu, 04 Jun 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;오늘은 &lt;strong&gt;서버 소수전공&lt;/strong&gt; 1차시의 과제인 &lt;code&gt;bandit level0 ~ level7&lt;/code&gt; 까지 풀이를 진행할 것입니다.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;/p&gt;
&lt;h2&gt;1. Level0&lt;/h2&gt;
&lt;h3&gt;문제&lt;/h3&gt;
&lt;p&gt;:::div{class=&quot;white-code&quot;}&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;이 레벨의 목표는 SSH를 사용하여 게임에 로그인하는 것입니다.
연결해야 할 호스트는 bandit.labs.overthewire.org이며, 포트는 2220입니다.
사용자 이름은 bandit0이고 비밀번호도 bandit0입니다.
로그인 후 레벨 1 페이지로 이동하여 레벨 1을 클리어하는 방법을 확인하세요.
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;풀이&lt;/h3&gt;
&lt;h2&gt;&lt;img src=&quot;bandit0.png&quot; alt=&quot;bandit0&quot; /&gt;&lt;/h2&gt;
&lt;h2&gt;2. Level0 -&amp;gt; Level1&lt;/h2&gt;
&lt;h3&gt;문제&lt;/h3&gt;
&lt;p&gt;:::div{class=&quot;white-code&quot;}&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;다음 레벨의 비밀번호는 홈 디렉터리에 있는 readme라는 파일에 저장되어 있습니다.
이 비밀번호를 사용하여 SSH로 bandit1에 로그인하세요.
레벨 비밀번호를 찾을 때마다 SSH(2220번 포트)를 통해 해당 레벨에 로그인하여 게임을 계속 진행하십시오.
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;풀이&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;bandit1.png&quot; alt=&quot;level1&quot; /&gt;&lt;/p&gt;
&lt;p&gt;가장 먼저, &lt;code&gt;ls&lt;/code&gt;를 쳐보니 &lt;strong&gt;readme 파일&lt;/strong&gt;이 있어 &lt;code&gt;cat&lt;/code&gt;으로 내용을 확인했습니다.&lt;br /&gt;
안에서 다음 레벨로 가는 비밀번호를 획득했습니다.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;3. Level1 -&amp;gt; Level2&lt;/h2&gt;
&lt;h3&gt;문제&lt;/h3&gt;
&lt;p&gt;:::div{class=&quot;white-code&quot;}&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;다음 레벨의 비밀번호는 홈 디렉터리에 있는 &apos;-&apos;라는 파일에 저장되어 있습니다.
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;풀이&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;bandit2.png&quot; alt=&quot;level2&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;ls&lt;/code&gt;를 쳐보니, &lt;strong&gt;-&lt;/strong&gt; 라는 파일이 있었습니다.&lt;br /&gt;
찾아보니 &lt;strong&gt;-(dashed filename)&lt;/strong&gt; 은 옵션 사용와 혼동이 생길 수 있다고 하여&lt;br /&gt;
&lt;code&gt;./&lt;/code&gt;를 앞에 붙여 경로로 파일을 지정했습니다.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;cat&lt;/code&gt;으로 파일 내용을 출력해 level1의 비밀번호를 획득했습니다.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;4. Level2 -&amp;gt; Level3&lt;/h2&gt;
&lt;h3&gt;문제&lt;/h3&gt;
&lt;p&gt;:::div{class=&quot;white-code&quot;}&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;다음 레벨의 비밀번호는 홈 디렉터리에 있는 --spaces in this filaneme-- 이라는 파일에 저장되어 있습니다.
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;풀이&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;bandit3.png&quot; alt=&quot;level3&quot; /&gt;
&lt;code&gt;ls&lt;/code&gt;를 하면 &lt;strong&gt;--spaces in this filename--&lt;/strong&gt; 이라는 파일이 있습니다.&lt;br /&gt;
&lt;strong&gt;&quot;-&quot;&lt;/strong&gt; 와 &lt;strong&gt;공백문자&lt;/strong&gt; 때문에 정상적인 파일 지정이 되지 않을 것 같아 파일명을 &lt;strong&gt;문자열로 지정&lt;/strong&gt;했습니다.&lt;br /&gt;
&lt;code&gt;cat&lt;/code&gt;으로 파일 내용을 출력해 다음 레벨로 가는 비밀번호를 획득했습니다.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;5. Level3 -&amp;gt; Level4&lt;/h2&gt;
&lt;h3&gt;문제&lt;/h3&gt;
&lt;p&gt;:::div{class=&quot;white-code&quot;}&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;다음 레벨의 비밀번호는 inhere 디렉터리의 숨겨진 파일에 저장되어 있습니다.
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;풀이&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;bandit4.png&quot; alt=&quot;level4&quot; /&gt;
&lt;code&gt;inhere&lt;/code&gt; 디렉토리로 이동한 뒤, &lt;code&gt;ls -al&lt;/code&gt;을 치니 &lt;strong&gt;...Hiding-From-You&lt;/strong&gt; 라는 숨김 파일이 있었습니다.&lt;br /&gt;
이전 문제와 똑같이 파일명을 문자열 처리하여 &lt;code&gt;cat&lt;/code&gt;으로 파일 내용을 출력해 비밀번호를 획득했습니다.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;6. Level4 -&amp;gt; Level5&lt;/h2&gt;
&lt;h3&gt;문제&lt;/h3&gt;
&lt;p&gt;:::div{class=&quot;white-code&quot;}&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;다음 레벨의 비밀번호는 inhere 디렉터리에 있는 유일하게 사람이 읽을 수 있는 파일에 저장되어 있습니다.
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;풀이&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;bandit5.png&quot; alt=&quot;level5&quot; /&gt;
&lt;code&gt;inhere&lt;/code&gt; 디렉토리에서 &lt;code&gt;ls&lt;/code&gt;를 치니 &lt;strong&gt;-file00 ~ -file09&lt;/strong&gt; 라는 파일들이 있었습니다.&lt;br /&gt;
문제에 명시된 &lt;strong&gt;사람이 읽을 수 있는 파일&lt;/strong&gt;은 &lt;strong&gt;아스키 형식의 파일&lt;/strong&gt;을 말하는 것이라고 생각해 &lt;code&gt;file&lt;/code&gt;과 *****를 이용해 파일들의 데이터 타입을 먼저 확인했습니다.&lt;/p&gt;
&lt;p&gt;이후 데이터 타입이 &lt;strong&gt;ASCII text&lt;/strong&gt;인 &lt;strong&gt;-file07&lt;/strong&gt;의 파일 내용을 출력해 비밀번호를 획득했습니다.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;7. Level5 -&amp;gt; Level6&lt;/h2&gt;
&lt;h3&gt;문제&lt;/h3&gt;
&lt;p&gt;:::div{class=&quot;white-code&quot;}&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;다음 레벨의 비밀번호는 inhere 디렉토리 어딘가에 있는 파일에 저장되어 있으며 다음과 같은 특징을 가지고 있습니다.

사람이 읽을 수 있는 형식
Size: 1033Byte
실행 불가
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;풀이&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;bandit6.png&quot; alt=&quot;level6&quot; /&gt;
&lt;code&gt;inhere&lt;/code&gt; 디렉토리에서 &lt;code&gt;ls&lt;/code&gt;를 쳐보니 &lt;code&gt;maybehere00 ~ 19&lt;/code&gt; 라는 디렉토리가 있었습니다.&lt;br /&gt;
문제 조건에 있는 &lt;strong&gt;크기가 1033바이트인 파일&lt;/strong&gt;을 찾기 위해 &lt;code&gt;find&lt;/code&gt;를 사용했습니다.&lt;/p&gt;
&lt;p&gt;조건에 맞는 파일은 &lt;code&gt;maybehere07/file2&lt;/code&gt; 였습니다.&lt;br /&gt;
이 파일의 내용을 출력해 다음 레벨로 가는 비밀번호를 획득했습니다.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;8. Level6 -&amp;gt; Level7&lt;/h2&gt;
&lt;h3&gt;문제&lt;/h3&gt;
&lt;p&gt;:::div{class=&quot;white-code&quot;}&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;다음 레벨의 비밀번호는 서버 어딘가에 저장되어 있으며 다음과 같은 특징을 가지고 있습니다.

User: bandit7
Group: bandit6
Size: 33Byte
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;풀이&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;bandit7.png&quot; alt=&quot;level7&quot; /&gt;
이번 문제는 &lt;code&gt;ls&lt;/code&gt;를 쳐봐도 아무 것도 나오지 않습니다.(-al도 마찬가지)&lt;br /&gt;
문제에 있는 &lt;strong&gt;user가 bandit7이고 group이 bandit6이고 size가 33Byte인 파일&lt;/strong&gt;을 찾기 위해 &lt;code&gt;find&lt;/code&gt;를 사용했습니다.&lt;/p&gt;
&lt;p&gt;이때, 명령어 실행 과정에서 권한이 없는 파일 때문에 &lt;strong&gt;permision denied&lt;/strong&gt;가 도배되는 상황이 발생하여 찾아본 결과, &lt;code&gt;2&amp;gt;/dev/null&lt;/code&gt;을 뒤에 붙이면 해결된다는 것을 알 수 있었습니다.&lt;/p&gt;
&lt;p&gt;이후 최종적으로 알아낸 목표 파일 경로로 파일 내용을 출력하여 다음 레벨로 가는 비밀번호를 획득했습니다.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;마치며&lt;/h2&gt;
&lt;p&gt;거의 2년만에 bandit을 풀어보면서 다시 리눅스 명령어에 대해 알아볼 수 있어 재미있었습니다!&lt;br /&gt;
이후에도 가끔씩 bandit을 풀어보면 좋을 것 같습니다.&lt;/p&gt;
</content:encoded></item><item><title>[네트워크 초심찾기] ACL과 NAT</title><link>https://snowfairy.kr/posts/%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-%EC%B4%88%EC%8B%AC%EC%B0%BE%EA%B8%B0-acl%EA%B3%BC-nat/</link><guid isPermaLink="true">https://snowfairy.kr/posts/%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-%EC%B4%88%EC%8B%AC%EC%B0%BE%EA%B8%B0-acl%EA%B3%BC-nat/</guid><description>[네트워크 초심찾기] 1차시 - ACL과 NAT</description><pubDate>Wed, 20 May 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;작년 네트워킹 캠프 이후 제대로 된 네트워크 공부를 하지 않다보니 안그래도 잘 못하는 네트워크 실력이 입문자로 돌아간 느낌이 들어 네트워크 공부에 열정을 가지고 공부하던 초심을 되찾기 위해 &lt;code&gt;네트워크 초심찾기&lt;/code&gt;를 1~2주에 한 번씩 작성하려고 한다.&lt;/p&gt;
&lt;p&gt;첫 시간은 &lt;strong&gt;ACL&lt;/strong&gt;과 &lt;strong&gt;NAT&lt;/strong&gt; 이다.&lt;/p&gt;
&lt;hr /&gt;
&lt;h1&gt;ACL이란?&lt;/h1&gt;
&lt;p&gt;&lt;code&gt;ACL&lt;/code&gt;은 &lt;code&gt;Access Control List&lt;/code&gt;의 약자로, 네트워크 장비에서 트래픽을 허용하거나 차단하기 위해 사용하는 &lt;strong&gt;규칙 목록&lt;/strong&gt;이다.
인바운드 규칙과 아웃바운드 규칙을 나눠서 설정한다.&lt;/p&gt;
&lt;h2&gt;인바운드&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;인바운드(Inbound)&lt;/strong&gt; 는 외부에서 내부로 들어오는 데이터를 의미한다.&lt;br /&gt;
예시를 들자면, 아래의 G0/1을 기준으로, G0/1로 들어오는 것이 인바운드이다.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;[외부망] ---&amp;gt; G0/1 &amp;lt;--- [라우터 내부]
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;아웃바운드&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;아웃바운드(Outbound)&lt;/strong&gt; 는 내부에서 외부로 들어오는 데이터를 의미한다.&lt;br /&gt;
예시를 들자면, 아래의 G0/1을 기준으로, G0/1에서 외부로 나가는 것이 아웃바운드이다.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;[외부망] &amp;lt;--- G0/1 ---&amp;gt; [라우터 내부]
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h1&gt;ACL 기본 규칙&lt;/h1&gt;
&lt;p&gt;ACL에서는 기본적으로 항상 지켜지는 &lt;strong&gt;규칙&lt;/strong&gt;이 존재한다.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;위에서 부터 아래로 한줄씩 규칙을 검사함&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;여러 규칙 중, 첫 번째로 조건에 맞는 규칙을 적용함. 이후의 규칙들은 적용되지 않음&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;가장 마지막 조건은 항상 deny any(설정 이외 패킷은 전부 거부)&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ACL 정책에 여러 조건을 설정할 경우, 가장 최근에 설정한 조건이 마지막 조건으로 삽입&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Inbound와 Outbound를 필수적으로 명시해줘야 함&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;hr /&gt;
&lt;h1&gt;ACL의 종류&lt;/h1&gt;
&lt;p&gt;ACL은 &lt;code&gt;Standard ACL&lt;/code&gt;과 &lt;code&gt;Extended ACL&lt;/code&gt;로 나뉜다.&lt;br /&gt;
ACL에서는 &lt;strong&gt;ACL 번호&lt;/strong&gt; 라는 것을 사용하는데, Standard와 Extended는 번호의 범위가 서로 다르다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Standard ACL : 1 ~ 99, 1300 ~ 1999&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Extended ACL : 100 ~ 199, 2000 ~ 2699&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Standard ACL&lt;/h2&gt;
&lt;p&gt;Standard ACL은 패킷의 &lt;strong&gt;출발지 IP만을 확인&lt;/strong&gt;하여 검사하는 ACL이다.&lt;br /&gt;
목적지 IP나 포트 번호 등은 확인하지 않아 세밀한 제어는 어렵지만 설정이 비교적 단순하다.&lt;/p&gt;
&lt;h3&gt;명령어&lt;/h3&gt;
&lt;p&gt;:::div{class=&quot;white-code&quot;}&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Router(config)# access-list [ACL 번호] [permit | deny] [송신측 IP 주소] [와일드카드마스크]
Router(config)# interface [적용할 인터페이스명]
Router(config)# ip access-list [ACL 번호] [in | out]
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Extended ACL&lt;/h2&gt;
&lt;p&gt;Extended ACL은 &lt;strong&gt;출발지 IP, 목적지 IP, 프로토콜, 포트 번호까지 확인&lt;/strong&gt;해서 트래픽을 제어하는 ACL이다.&lt;br /&gt;
Standard ACL 보다 더 세밀하게 규칙을 설정할 수 있다.&lt;/p&gt;
&lt;h3&gt;명령어&lt;/h3&gt;
&lt;p&gt;:::div{class=&quot;white-code&quot;}&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Router(config)# access-list [ACL 번호] [permit | deny] [프로토콜] [송신측 IP 주소] [송신측 와일드카드마스크] [목적지 IP 주소] [목적지 와일드카드마스크]
Router(config)# interface [적용할 인터페이스명]
Router(config)# ip access-list [ACL 번호] [in | out]
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h1&gt;ACL 실습&lt;/h1&gt;
&lt;p&gt;실습은 패킷 트레이서에서 진행하며, 토폴로지는 아래 사진과 같다.
&lt;img src=&quot;./acl_topology.png&quot; alt=&quot;토폴로지&quot; /&gt;&lt;/p&gt;
&lt;p&gt;기본적인 ip 주소 할당은 건너뛰겠다.&lt;/p&gt;
&lt;h2&gt;Router0&lt;/h2&gt;
&lt;p&gt;:::div{class=&quot;white-code&quot;}&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Router(config)#access-list 10 permit host 192.168.1.10
Router(config)#access-list 10 deny host 192.168.1.11
Router(config)#int g0/0
Router(config-if)#ip access-group 10 in
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Router1&lt;/h2&gt;
&lt;p&gt;:::div{class=&quot;white-code&quot;}&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Router(config)#access-list 100 permit host 192.168.2.10 host 192.168.1.10
Router(config)#access-list 100 deny host 192.168.2.10 host 192.168.1.11
Router(config)#int g0/0
Router(config-if)ip access-group 100 in
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;해설&lt;/h2&gt;
&lt;p&gt;토폴로지를 보면 &lt;code&gt;192.168.1.10&lt;/code&gt;과 &lt;code&gt;192.168.2.10&lt;/code&gt; 끼리 서로 통신이 가능하고,&lt;br /&gt;
&lt;code&gt;192.168.1.11&lt;/code&gt;과 &lt;code&gt;192.168.2.10&lt;/code&gt; 끼리 서로 통신이 불가능 하게 acl을 설정해야 한다.&lt;/p&gt;
&lt;h3&gt;Router0&lt;/h3&gt;
&lt;p&gt;router 0에서는 Standard ACL을 이용해 &lt;code&gt;192.168.1.*&lt;/code&gt; 에서 &lt;code&gt;192.168.2.10&lt;/code&gt; 으로의 트래픽을 설정해 줬다.&lt;/p&gt;
&lt;p&gt;이 때, 명령어에 있는 &lt;code&gt;host&lt;/code&gt;가 정확히 무엇인지를 몰라서 찾아본 결과,&lt;br /&gt;
&lt;code&gt;host&lt;/code&gt;는 특정 IP 주소 하나만 정확하게 지정하기 위한 Cisco IOS의 &lt;strong&gt;문법 키워드(keyword)&lt;/strong&gt; 였다.&lt;/p&gt;
&lt;p&gt;예를 들어 아래 명령어는&lt;/p&gt;
&lt;p&gt;:::div{class=&quot;white-code&quot;}&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Router(config)#access-list 10 permit host 192.168.1.10
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;실제로는 아래 명령어와 동일한 의미를 가진다.&lt;/p&gt;
&lt;p&gt;:::div{class=&quot;white-code&quot;}&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Router(config)#access-list 10 permit 192.168.1.10 0.0.0.0
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;br&amp;gt;&lt;/p&gt;
&lt;p&gt;ACL에서 사용하는 와일드카드 마스크는 &lt;strong&gt;0이면 반드시 비교하고, 1이면 무시&lt;/strong&gt;한다는 의미를 가진다.&lt;/p&gt;
&lt;p&gt;즉, &lt;code&gt;0.0.0.0&lt;/code&gt; 은 모든 비트를 정확하게 비교한다는 뜻이므로, 오직 &lt;code&gt;192.168.1.10&lt;/code&gt; 하나의 IP 주소만 허용하게 된다.&lt;/p&gt;
&lt;p&gt;&amp;lt;br&amp;gt;&lt;/p&gt;
&lt;p&gt;반대로 아래와 같은 경우에는&lt;/p&gt;
&lt;p&gt;:::div{class=&quot;white-code&quot;}&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Router(config)#access-list 10 permit 192.168.1.0 0.0.0.255
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;마지막 8비트를 무시하게 되므로 &lt;code&gt;192.168.1.X&lt;/code&gt; 대역 전체를 의미하게 된다.&lt;/p&gt;
&lt;p&gt;처음에는 host가 프로토콜 종류라고 생각했는데, 실제로는 프로토콜이 아니라
Cisco IOS CLI 내부에서 사용하는 문법용 키워드에 가까운 개념이었다.&lt;/p&gt;
&lt;h3&gt;Router1&lt;/h3&gt;
&lt;p&gt;router 1에서는 Extended ACL을 이용해 &lt;code&gt;192.168.1.10&lt;/code&gt;과 &lt;code&gt;192.168.1.11&lt;/code&gt;에서 &lt;code&gt;192.168.2.10&lt;/code&gt;으로의 트래픽을 설정해 줬다.
Extended ACL이기 때문에 Standard ACL과는 다르게 출발지 IP 주소 뿐 만 아니라 목적지 IP 주소도 적어줬다.&lt;/p&gt;
&lt;h3&gt;정답 체크&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;pc0(192.168.1.10) -&amp;gt; pc2(192.168.2.10) 성공&lt;/strong&gt;
&lt;img src=&quot;./acl_success1.png&quot; alt=&quot;pc0&quot; /&gt;
&amp;lt;br&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;pc1(192.168.1.11) -&amp;gt; pc2(192.168.2.10) 실패&lt;/strong&gt;
&lt;img src=&quot;./acl_success2.png&quot; alt=&quot;pc1&quot; /&gt;
&amp;lt;br&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;pc2(192.168.2.10) -&amp;gt; pc0(192.168.1.10) 성공&lt;/strong&gt;&lt;br /&gt;
&lt;strong&gt;pc2(192.168.2.10) -&amp;gt; pc1(192.168.1.11) 실패&lt;/strong&gt;
&lt;img src=&quot;./acl_success3.png&quot; alt=&quot;pc2&quot; /&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;h1&gt;NAT란?&lt;/h1&gt;
&lt;p&gt;&lt;code&gt;IPv4&lt;/code&gt;는 32비트로, 약 43억개의 주소를 사용할 수 있다.&lt;br /&gt;
주소는 한정되어 있지만 이를 필요로 하는 네트워크 장비들이 계속 증가함에 따라 이를 해결 하는 것이 중요해졌다.&lt;/p&gt;
&lt;p&gt;이에 맞춰 등장하게 된 기술이 바로 &lt;code&gt;NAT&lt;/code&gt;이다.&lt;br /&gt;
&lt;code&gt;NAT&lt;/code&gt;는 &lt;code&gt;Network Addess Translation&lt;/code&gt;의 약자로, 사설 IP를 공인 IP로 변경하는데 필요한 주소 변환 서비스 입니다.&lt;/p&gt;
&lt;h2&gt;사설 IP&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;사설 IP&lt;/code&gt;는 인터넷과 직접 연결되지 않는 &lt;strong&gt;내부 네트워크에서 사용하는 IP 주소&lt;/strong&gt;이다.&lt;br /&gt;
&lt;strong&gt;내부 네트워크에서만 유효&lt;/strong&gt;하며, 다른 네트워크에서는 중복 사용이 불가능하다.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./private_ip.png&quot; alt=&quot;사설ip&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;공인 IP&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;공인 IP&lt;/code&gt;는 &lt;strong&gt;인터넷과 직접 연결할 수 있는 IP 주소&lt;/strong&gt;로, 인터넷을 통해 접근할 수 있는 모든 장치에 할당된다.&lt;br /&gt;
인터넷 서비스 제공 업체인 ISP나 공인 IP 주소를 관리하는 기관에 의해 할당되며, &lt;strong&gt;중복해서 사용이 불가능&lt;/strong&gt;하다.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./public_ip.png&quot; alt=&quot;공인ip&quot; /&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;h1&gt;NAT가 필요한 이유&lt;/h1&gt;
&lt;p&gt;NAT는 단순히 &lt;code&gt;사설 IP를 공인 IP로 바꾸는 기술&lt;/code&gt; 이상의 의미가 있다.
실제로는 아래와 같은 이유 때문에 사용된다.&lt;/p&gt;
&lt;h2&gt;1. IPv4 주소 부족 문제 해결&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;IPv4&lt;/code&gt; 주소는 약 43억 개밖에 존재하지 않는다.
하지만 인터넷 장비 수는 이미 이를 훨씬 초과했기 때문에, 모든 장비에 공인 IP를 직접 할당하는 것은 현실적으로 어렵다.&lt;/p&gt;
&lt;p&gt;그래서 대부분의 환경에서는 내부 네트워크에서는 사설 IP를 사용하고, &lt;strong&gt;외부 인터넷과 통신할 때만 공인 IP로 변환&lt;/strong&gt;해서 사용한다.&lt;/p&gt;
&lt;h2&gt;2. 내부 네트워크 구조 은닉&lt;/h2&gt;
&lt;p&gt;외부에서는 NAT 장비의 공인 IP만 보이기 때문에 내부 IP 구조가 직접 노출되지 않는다.&lt;/p&gt;
&lt;p&gt;예를 들어 내부 PC가 아래와 같은 주소를 사용하더라도&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;192.168.1.10
192.168.1.11
192.168.1.12
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;외부에서는 NAT 장비의 공인 IP 하나만 보게 된다.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;203.0.113.10
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;즉, &lt;strong&gt;내부 네트워크 구조를 어느 정도 숨길 수 있다&lt;/strong&gt;는 장점이 있다.&lt;/p&gt;
&lt;hr /&gt;
&lt;h1&gt;NAT 동작 과정&lt;/h1&gt;
&lt;p&gt;예를 들어 내부 PC인 192.168.1.10 이 인터넷 서버인 8.8.8.8 로 패킷을 전송한다고 가정하자.&lt;/p&gt;
&lt;p&gt;처음 패킷은 아래와 같다.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;출발지 IP : 192.168.1.10
목적지 IP : 8.8.8.8
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;하지만 사설 IP는 인터넷에서 직접 사용할 수 없기 때문에,
라우터는 NAT Table을 참고하여 출발지 IP를 공인 IP로 변경한다.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;출발지 IP : 203.0.113.10
목적지 IP : 8.8.8.8
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;이후 응답 패킷이 다시 돌아오면, NAT 장비는 NAT Table을 참고하여 다시 내부 사설 IP로 변환해준다.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;203.0.113.10 → 192.168.1.10
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;즉, NAT는 단순 치환이 아니라 &lt;strong&gt;양방향 주소 변환 작업&lt;/strong&gt;이라고 볼 수 있다.&lt;/p&gt;
&lt;hr /&gt;
&lt;h1&gt;NAT Table&lt;/h1&gt;
&lt;p&gt;NAT 장비는 주소 변환 내용을 &lt;code&gt;NAT Table&lt;/code&gt; 에 저장한다.&lt;/p&gt;
&lt;p&gt;예를 들어 아래와 같은 통신이 발생했다고 가정하자.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;192.168.1.10 → 203.0.113.10
192.168.1.11 → 203.0.113.11
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;그러면 &lt;code&gt;NAT Table&lt;/code&gt;에는 대략 아래와 같은 정보가 저장된다.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Inside Local	    Inside Global
192.168.1.10	    203.0.113.10
192.168.1.11	    203.0.113.11
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;여기서 중요한 개념이 있다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Inside Local&lt;/strong&gt; : 내부에서 사용하는 실제 사설 IP&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Inside Global&lt;/strong&gt; : 외부에 공개되는 공인 IP&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Cisco에서는 NAT 관련 용어를 아래처럼 구분한다.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Inside Local	        내부 사설 IP
Inside Global	       변환된 공인 IP
Outside Local	       외부 장비 주소
Outside Global	      실제 외부 공인 주소
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;br&amp;gt;&lt;/p&gt;
&lt;h3&gt;확인 명령어&lt;/h3&gt;
&lt;p&gt;:::div{class=&quot;white-code&quot;}&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;router# show ip nat translations
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;예시 출력:
:::div{class=&quot;white-code&quot;}&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Pro  Inside global      Inside local       Outside local      Outside global
tcp  203.0.113.10:1025  192.168.1.10:1025  8.8.8.8:80         8.8.8.8:80
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;현재 &lt;strong&gt;어떤 사설 IP가 어떤 공인 IP로 변환되었는지 확인&lt;/strong&gt;할 수 있다.&lt;/p&gt;
&lt;p&gt;&amp;lt;br&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;통계 정보&lt;/strong&gt;는 아래 명령어로 확인 가능하다.
:::div{class=&quot;white-code&quot;}&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;router# show ip nat statistics
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h1&gt;NAT의 종류&lt;/h1&gt;
&lt;p&gt;&lt;code&gt;NAT&lt;/code&gt;의 종류로는 &lt;code&gt;Static NAT&lt;/code&gt;, &lt;code&gt;Dynamic NAT&lt;/code&gt;, &lt;code&gt;PAT&lt;/code&gt;가 있다.&lt;/p&gt;
&lt;h2&gt;Static NAT&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;Static NAT&lt;/code&gt;는, 사설 ip와 공인 ip를 미리 &lt;strong&gt;1:1로&lt;/strong&gt; 매핑 해놓는 방식의 NAT이다.&lt;/p&gt;
&lt;h3&gt;명령어&lt;/h3&gt;
&lt;p&gt;:::div{class=&quot;white-code&quot;}&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;router(config)# (ACL 설정)
router(config)# ip nat inside source static [사설 ip 주소] [변환할 공인 ip 주소]
router(config)# interface [사설 네트워크 인터페이스]
router(config-if)# ip nat inside
router(config-if)# interface [공인 네트워크 인터페이스]
router(config-if)# ip nat outside
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Dynamic NAT&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;Dynamic NAT&lt;/code&gt;는 출발지나 목적지의 ip가 사전에 정해져 있지 않고, NAT가 &lt;strong&gt;필요할 때마다&lt;/strong&gt;  &lt;code&gt;ip pool&lt;/code&gt;에서 선택한 ip로 매핑하는 방식의 NAT이다.&lt;/p&gt;
&lt;h3&gt;명령어&lt;/h3&gt;
&lt;p&gt;:::div{class=&quot;white-code&quot;}&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;router(config)# (ACL 설정)
router(config)# ip nat pool [풀 이름] [변환할 공인 IP 주소] netmask [서브넷마스크]
router(config)# ip nat inside source list [ACL 번호] pool [풀 이름]
router(config)# interface [사설 네트워크 인터페이스]
router(config-if)# ip nat inside
router(config-if)# interface [공인 네트워크 인터페이스]
router(config-if)# ip nat outside
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;NAT Pool?&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;Dynamic NAT&lt;/code&gt;는 사용할 공인 IP들을 미리 묶어서 관리하는데, 이를 &lt;code&gt;NAT Pool&lt;/code&gt; 이라고 한다.&lt;/p&gt;
&lt;p&gt;예를 들어 아래와 같이 공인 IP 대역을 할당 받았다고 치자.
:::div{class=&quot;white-code&quot;}&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;203.0.113.10
203.0.113.11
203.0.113.12
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;이 공인 IP들을 하나의 &lt;code&gt;pool&lt;/code&gt;로 등록해 두고, 내부 사용자가 인터넷에 접속할 때마다 사용 가능한 공인 IP를 임시로 할당한다.&lt;/p&gt;
&lt;h2&gt;PAT&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;PAT&lt;/code&gt;는 &lt;code&gt;Port Address Translation&lt;/code&gt;의 약자로, 공인 ip 주소 1개에 사설 ip 주소 여러 개를 &lt;strong&gt;n:1로 매핑&lt;/strong&gt;하는 NAT이다.&lt;/p&gt;
&lt;p&gt;변환된 ip 주소로는 사내망 호스트들을 구분할 수 없기 때문에 &lt;strong&gt;포트 번호를 부여&lt;/strong&gt;하여 구분한다.&lt;/p&gt;
&lt;h3&gt;명령어&lt;/h3&gt;
&lt;p&gt;:::div{class=&quot;white-code&quot;}&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;router(config)# (ACL 설정)
router(config)# ip nat inside source list [ACL 번호] interface [외부 인터페이스 이름] overload
router(config)# interface [사설 네트워크 인터페이스]
router(config-if)# ip nat inside
router(config-if)# interface [공인 네트워크 인터페이스]
router(config-if)# ip nat outside
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;lt;!-- ---&lt;/p&gt;
&lt;h1&gt;실습 1&lt;/h1&gt;
&lt;p&gt;실습은 패킷 트레이서에서 진행하며, 토폴로지는 아래 사진과 같다.
&lt;img src=&quot;./NAT_topology.png&quot; alt=&quot;토폴로지&quot; /&gt;&lt;/p&gt;
&lt;p&gt;기본적인 ip할당 및 Router1의 라우팅은 건너뛰겠다.&lt;/p&gt;
&lt;h2&gt;Router 0&lt;/h2&gt;
&lt;p&gt;:::div{class=&quot;white-code&quot;}&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Router(config)#access-list 10 permit 192.168.10.0 0.0.0.255
Router(config)#ip nat pool R0_POOL 100.100.100.10 100.100.100.20 netmask 255.255.255.0
Router(config)#ip nat inside source list 10 pool R0_POOL
Router(config)#interface g0/0/0
Router(config-if)#ip nat inside
Router(config-if)#interface s0/1/0
Router(config-if)#ip nat outside
Router(config-if)#interface loopback0
Router(config-if)#ip address 100.100.100.1 255.255.255.0

Router(config)#router rip
Router(config-router)#ver 2
Router(config-router)#no au
Router(config-router)#net 192.168.10.0
Router(config-router)#net 10.10.10.0
Router(config-router)#net 100.100.100.0
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Router 2&lt;/h2&gt;
&lt;p&gt;:::div{class=&quot;white-code&quot;}&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Router(config)#access-list 11 permit 192.168.20.0 0.0.0.255
Router(config)#ip nat pool R2_POOL 200.200.200.10 200.200.200.20 netmask 255.255.255.0
Router(config)#ip nat inside source static 192.168.20.3 200.200.200.3
Router(config)#ip nat inside source list 11 pool R2_POOL
Router(config)#interface g0/0/0
Router(config-if)#ip nat inside
Router(config-if)#interface s0/1/1
Router(config-if)#ip nat outside
Router(config-if)#interface loopback0
Router(config-if)#ip address 200.200.200.1 255.255.255.0

Router(config)#router rip
Router(config-router)#ver 2
Router(config-router)#no au
Router(config-router)#net 192.168.20.0
Router(config-router)#net 20.20.20.0
Router(config-router)#net 200.200.200.0
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;해설&lt;/h2&gt;
&lt;h2&gt;정답 체크&lt;/h2&gt;
&lt;hr /&gt;
&lt;h1&gt;실습 2&lt;/h1&gt;
&lt;p&gt;&lt;img src=&quot;./PAT_topology.png&quot; alt=&quot;토폴로지&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;Router 0&lt;/h2&gt;
&lt;h2&gt;Router 1&lt;/h2&gt;
&lt;h2&gt;Router 2&lt;/h2&gt;
&lt;h2&gt;해설&lt;/h2&gt;
&lt;h2&gt;정답 체크&lt;/h2&gt;
&lt;p&gt;--&amp;gt;&lt;/p&gt;
</content:encoded></item><item><title>2023 천하제일 코딩대회 문제 풀이 - A, B번</title><link>https://snowfairy.kr/posts/2023-%EC%84%A0%EB%A6%B0-%EC%B2%9C%ED%95%98%EC%A0%9C%EC%9D%BC-%EC%BD%94%EB%94%A9%EB%8C%80%ED%9A%8C-%EB%AC%B8%EC%A0%9C-%ED%92%80%EC%9D%B4---a-b%EB%B2%88/</link><guid isPermaLink="true">https://snowfairy.kr/posts/2023-%EC%84%A0%EB%A6%B0-%EC%B2%9C%ED%95%98%EC%A0%9C%EC%9D%BC-%EC%BD%94%EB%94%A9%EB%8C%80%ED%9A%8C-%EB%AC%B8%EC%A0%9C-%ED%92%80%EC%9D%B4---a-b%EB%B2%88/</guid><description>2023 천하제일 코딩 대회 A, B번 문제 풀이</description><pubDate>Sun, 17 May 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;이번 7월에 돌아오는 천하제일 코딩대회를 준비하기 위해 이전 대회의 문제를 풀어보았다.&lt;br /&gt;
다만, 백준이 없어진 탓에 채점을 할 수 없어 정확한 코드인지 확인하는데 애를 먹었다.&lt;/p&gt;
&lt;h2&gt;A. 10!&lt;/h2&gt;
&lt;p&gt;n으로 들어오는 수의 펙토리얼을 10!으로 나눈 값을 6으로 나누면 되는 간단한 문제였다.&lt;br /&gt;
값이 커질 수 있기 때문에 &lt;code&gt;ans&lt;/code&gt;를 unsigned long long int로 선언하고 11 ~ n까지 순회하며 곱한 뒤 6을 곱해 출력하였다.&lt;/p&gt;
&lt;h3&gt;정답코드&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;#include &amp;lt;iostream&amp;gt;

using namespace std;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    
    int n;
    cin &amp;gt;&amp;gt; n;

    unsigned long long int ans = 1;
    for (int i = 11; i &amp;lt;= n; i++) {
        ans *= i;
    }

    cout &amp;lt;&amp;lt; ans * 6;
    return 0;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h2&gt;B. 고양이 카페&lt;/h2&gt;
&lt;p&gt;$w_i$는 가장 큰 값과 가장 작은 값끼리 짝을 짓는 것이 가장 좋다.&lt;br /&gt;
만약 가장 큰 값과 가장 작은 값이 $k$를 초과한다면 그 다음으로 큰 값과 가장 작은 값끼리 짝을 짓는다.&lt;/p&gt;
&lt;p&gt;이 과정을 반복하여 행복해질 수 있는 사람의 최댓값을 구했다.&lt;/p&gt;
&lt;h3&gt;정답 코드&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;#include &amp;lt;iostream&amp;gt;
#include &amp;lt;algorithm&amp;gt;
#include &amp;lt;vector&amp;gt;

using namespace std;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);

    int n;
    int k;
    cin &amp;gt;&amp;gt; n &amp;gt;&amp;gt; k;

    vector&amp;lt;int&amp;gt; arr;

    for (int i = 0; i &amp;lt; n; i++) {
        int a;
        cin &amp;gt;&amp;gt; a;
        arr.push_back(a);
    }
    sort(arr.begin(), arr.end());

    int st = 0, end = n - 1, cnt = 0;
    while (st &amp;lt; end) {
        if (arr[st] + arr[end] &amp;lt;= k) {
            st++;
            cnt++;
        }
        end--;
    }

    cout &amp;lt;&amp;lt; cnt;
    return 0;
}
&lt;/code&gt;&lt;/pre&gt;
</content:encoded></item></channel></rss>