베지밀

[네트워크] 도커 포트 포워딩 실습 (netcat, ssh) 본문

개인 공부/네트워크

[네트워크] 도커 포트 포워딩 실습 (netcat, ssh)

vegimil 2024. 7. 24. 16:39

Docker로 컨테이너 두 개 만들어서 네트워크 실습 진행

 

우선 작업의 편리함을 위해 VSCode에 Docker를 Attach했다.

VSCode와 Docker 연동은 요기 참고 >> https://89douner.tistory.com/123

 

 

1. 컨테이너 생성하기

cmd 혹은 VSCode의 파워쉘 터미널에 아래 명령어를 입력해서 컨테이너 두 개 생성

docker run -dit -p 8001:8001 --name server ubuntu:22.04
docker run -dit -p 8002:8002 --name client ubuntu:22.04

docker run -dit -p 8001:8001 --name server ubuntu:22.04
docker run -dit -p 8002:8002 --name client ubuntu:22.04

-p [호스트pc 포트]:[컨테이너의 포트]

--name [컨테이너 이름]

 

실습을 위해 각각 server / client로 구분했다.

이후에는 server와 cllient 컨테이너를 동시에 띄우고 진행!!

 

 

2. 서버와 클라이언트의 접속 정보 확인하기

생성한 두 컨테이너를 VSCode에서 열어준다.

마우스 우클릭 > Attach Visual Studio Code

 

 

네트워크 실습을 위해 netstat을 설치해준다.

# 서버 / 클라이언트 공통

apt update
apt install net-tools

 

netstat -a로 설치 확인 가능

 

 

ifconfig로 ip정보를 확인

 

 

이를 통해 확인한 실습 접속 정보는 다음과 같다

server ip : 172.17.0.2
server port : 8001

client ip : 172.17.0.3
client port : 8002

 

3. netcat을 이용한 통신

netcat(=network cat)을 통해 클라이언트가 메세지를 보내고, 서버가 받을 수 있도록 해보자.

# 서버 / 클라이언트 공통

apt update
apt install netcat

 

 

netcat 사용법

# 받는 쪽 = 서버
nc -l -p [나의 port]

# 보내는 쪽 = 클라이언트
nc [상대방의 ip] [상대방의 port]

 

-l은 listen의 약자. 나의 port로 통신 내용을 듣겠다는 것!

 

서버를 먼저 열어주고, 클라이언트로 연결해보자.

아무것도 뜨지 않는다.

 

무언가를 입력하면 그대로 전송된다

 

 

4. ssh 접속하기

ssh = secure shell

인터넷을 통해 터미널 사용하도록 함.

거의 모든 서버는 ssh를 통해 원격 접속되어 관리된다.

 

open ssh를 사용하여 클라이언트가 서버의 터미널을 사용할 수 있도록 해보자.

 

우선, ssh를 서버와 클라이언트 각각에 설치해야 한다.

서버는 ssh-server를, 클라이언트는 ssh-client를 설치한다.

# ssh-client 설치 명령어
apt update
apt install ssh

 

클라이언트에 ssh 설치 후, ssh 명령어를 통해 설치 확인

 

# ssh-server 설치 (기본적으로 22번 포트 사용)
apt update
apt install openssh-server

서버에 openssh-server 설치 후,  service ssh status로 설치 확인

 

ssh-server를 켜고 끄는 명령어는 다음과 같다

service ssh start
service ssh stop
service ssh restart

 

 

ssh는 기본적으로 root로의 접속을 막고 있기 때문에, ssh 접속용 계정을 만들어야 한다.

# 서버 측에 계정 생성
adduser guest1

클라이언트가 원격으로 접속할 때, 서버의 어떤 계정으로 들어올지를 정하는 것이다.

 

 

ssh 접속을 위해서, ssh 설정파일을 수정해야 한다.

ssh 접속 포트를 변경하고, user를 추가하자.

 

 

나는 VSCode로 열었기 때문에 /etc/ssh/sshd_config 경로에 들어가서 수정했다.

 

ssh 기본 포트는 22인데, 현재 host와 연결되어 있는 포트는 8001이기 때문에 ssh 설정파일을 변경해줘야한다.

또한 guest1이라는 유저를 허용해야 한다.

위와 같이 수정하고 설정 적용을 위해 ssh 서버를 재시작하자.

재시작 명령어 : service ssh restart

 

 

이제 클라이언트에서 다음 명령어로 서버에 접속이 가능하다

ssh -p [서버 port] [user]@[서버 ip]

접속 성공

 

 

5. root 계정으로 접속하기

# 서버에 sudo를 설치
apt install sudo

# guest1 계정을 sudo 그룹에 추가
usermod -aG sudo guest1

# sudo 그룹에 추가되었는지 확인해보기
cat /etc/group | grep sudo

 

클라이언트에서 ssh에 재접속해보면 sudo 사용이 가능하다

 

 

 

 


 

다음엔 파이썬으로 소켓 실습 진행