리눅스는 가상의 PC이다.
그럼 가상의 PC를 어떻게 사용할 수 있을까? 결국은 현실의 PC와 연결을 통해서 사용할 수 있다.
이러한 연결을 할 수 있게 해주는 것이 바로 네트워크다.
리눅스 IP 주소 설정하는 방법
리눅스에서 IP주소를 설정하기 위해서는 먼저 설정 디렉토리로 이동해야 된다.
/etc/sysconfig/network-scrips 디렉토리로 이동하면 ifcfg-ens160 파일을 확인할 수 있다.
그 후 vi 편집기를 통해서 ifcfg-ens160 파일을 편집하여 네트워크 설정을 편집할 수 있다.
네트워크 설정 파일에서 중요한 설정 내용은 아래와 같다.
BOOTPROTO: IP 주소 할당 방법(dhcp - 자동 | static - 수동)
IPADDR: 자신이 원하는 IP 주소를 지정한다.
NETMASK: 넷마스크(서브넷 마스크)를 지정한다.
GATEWAY: 게이트웨이 주소를 지정한다.
DNS1: 기본 DNS 서버 주소를 설정한다. (8.8.8.8은 구글)
IP를 설정했다면 꼭 확인하는 과정을 거쳐야 하는데 먼저 네트워크를 재시작 해줘야 한다.
현재 리눅스는 CentOS 8 버전으로 systemctl restart NetworkManager를 실행해야 된다.
재시작을 했으면 ip addr을 통해서 내가 지정한 주소가 잘 설정되었는지 확인할 수 있다.
마지막으로 ping 명령어를 통해서 내가 설정한 ip 주소와 잘 통신하는지 확인해 본다.
포트 포워딩(Port Forwarding)
내가 만든 서비스를 다른 사람도 사용할 수 있게 하려면 어떻게 해야 될까?
내가 만든 서비스는 현재 내 PC에 저장되어 있기 때문에 결국에는 나만 접속할 수 있는 상태이다.
만약 내가 빵을 만들어서 판다고 생각해 보자
내가 빵을 파는 사람인데 우리 집에서 파는 것이 안전할까?
내가 모르는 사람이 우리 집에 와서 빵을 사간다면 그 사람이 안전한 사람이라는 것을 어떻게 알 수 있을까? 안전하지 않은 사람이 방문하여 무슨 짓을 할지 모르기 때문에 빵을 팔기 위해서는 조금 더 좋은 방법이 있어야 한다.
그렇다면 우리가 빵을 만들어서 빵집에서 판다고 하면 어떨까?
조금 더 개방적인 공간과 사람들이 지나다니기 때문에 위험한 사람으로부터 안전하게 빵을 판매할 수 있다.
앞선 비유와 같이 남들이 내가 만든 서비스에 접근하려면 내 PC 주소를 알아야 하는데 내가 모르는 사람이 직접 접근하는 것은 매우 위험하다. 따라서 어떤 경유지를 통해서 내 PC로 접근해야 되는데 그러한 역할을 하는 것이 공유기이다.
그러면 이제 공유기를 통해서 친구가 내 서비스에 접속했다고 생각해 보자.
나는 메신저 서비스를 만들었고 친구가 해당 서비스를 이용해서 메시지를 나에게 보냈다. 그런데 여기서 문제가 발생한다.
친구의 PC에서 메시지를 전송하였고 현재 서비스를 운영하고 있는 내 PC까지 도달하였다. 하지만 내가 카카오톡, DM 등 다른 메신저를 켜둔 상황이면 친구가 보낸 메시지가 어디로 가야 되는지 혼동이 생기게 된다.
이럴 때 사용하는 것이 포트 번호이다. 포트 번호를 통해서 여러 메신저 서비스 중에서 내가 만든 서비스가 어떤 것인지 구분해 준다.
이러한 포트 번호를 설정하여 외부 사용자가 내 서비스에 접속할 수 있게 해주는 것이 포트 포워딩이다.
그럼 이제 리눅스를 통해서 포트 포워딩하는 방법을 알아보자.
포트 포워딩 테스트는 nginx 서버 프로그램으로 테스트를 진행하였다.
먼저 nginx를 설치해 준다.
그다음 Virtual Network Editor를 통해서 가상 공유기를 설정해 준다.
NAT 설정을 하기 위해서 관리자 모드로 실행시켜 주고 NAT Settings를 클릭한다.
NAT 설정 페이지로 넘어가면 먼저 게이트웨이 주소를 확인할 수 있는데 해당 주소는 가상의 공유기 주소이다.
호스트 포트번호를 7276으로 설정해 주고 내가 설정한 가상의 컴퓨터 IP주소와 nginx 웹 서버의 포트 번호를 설정해 준다.
포트 포워딩은 하나의 약속으로 7276 포트 번호로 접속하면 내가 설정한 12.12.12.100의 80번 포트 번호로 설정되어 있는 프로그램으로 접속할 수 있게 하였다.
NAT 설정 페이지를 닫고 마지막으로 서브넷 IP와 서브넷 마스크를 지정해 주고 Apply를 눌러서 설정을 완료한다.
설정을 완료한 후 nginx 웹 서버를 실행시켜 주고 방화벽을 꺼준다.
외부 사용자가 접속하기 위해서는 꼭 방화벽을 꺼줘야 한다. 특정 포트 번호에 대해서만 꺼줄 수 있지만 지금은 다 끈 상태에서 진행했다.
그다음 웹 브라우저를 실행시키고 포트 포워딩에서 설정한 호스트 포트 번호를 통해서 접속한다.
접속하면 해당 화면처럼 정상 실행이 되는 것을 확인할 수 있다.
전체적인 흐름은 그림을 통해서 이해해 보자.
현재 내가 사용하는 윈도우 PC에서 내 로컬 주소에 7276포트 번호로 접속을 시도하면 먼저 가상의 공유기가 해당 포트 번호를 확인하게 된다. 그 후 미리 설정해둔 IP주소와 포트번호를 통해서 nginx 웹 서버에 접근할 수 있게 된다.
윈도우 PC가 두 대라면 어떻게 될까?
먼저 윈도우 PC 1대에서 앞서 설정한 7276포트 번호로 접속을 하게 된다면 공유기를 통해서 같은 공유기를 사용하고 있는 또 다른 윈도우 PC로 보내게 된다.
해당 윈도우 PC에서 전달받은 포트 번호를 가상 공유기로 전달하게 되고 미리 설정한 포트 포워딩을 통해서 해당 포트 번호에 맞는 프로그램과 접속하게 된다.
해당 그림을 살펴보면 게이트웨이 주소에서 의문점이 생긴다.
보통 게이트웨이 주소를 192.168.0.1로 설정하는 이유는 192.168.0.0은 네트워크 주소, 마지막 주소인 192.168.0.255는 브로드 캐스트 주소로 사용되는데 해당 주소를 제외한 192.168.0.1 ~ 192.168.0.254에서 첫 번째 주소 혹은 마지막 주소를 사용하게 된다.
그렇다면 리눅스에서 사용하는 가상의 공유기는 왜 12.12.12.2로 끝나는 것일까?
기본적으로 VMware가 .1의 주소를 가져가기 때문에 공유기의 주소가 .2로 시작하게 된다. 이 부분을 유의해서 잘 생각해야 된다.
네트워킹 관련 명령어
항상 네트워크를 연결하기 전에 먼저 확인해야 할 부분이 있다.
IP 주소 확인
ip addr
IP 주소를 확인하는 명령어를 통해서 앞서 vi 편집기로 설정한 IP 주소가 잘 적용되었는지 확인한다.
신호가 잘 오는지 확인
- ping [IP주소]
- ping [DNS 주소]
ping 명령어를 사용하여 현재 내가 설정한 IP 주소에 신호가 잘 오는지 확인한다.
직접 설정한 DNS 주소를 통해서 신호가 잘 오는지 확인할 수도 있다.
서버가 실행 중인지 확인
ps -ef | grep [프로세스 명]
ps 명령어를 통해서 현재 실행중인 프로세스를 확인할 수 있는데 grep 명령어를 활용하여 내가 원하는 프로그램이 실행중인지 확인할 수 있다.
방화벽이 켜져 있는지 확인
systemctl status firewalld
외부와 포트 포워딩을 통해서 연결하기 위해서는 먼저 방화벽을 꺼줘야 한다. systemctl 명령어를 사용하여 start 하거나, stop 하고 status를 통해서 현재 상태를 확인할 수 있다.
포트 번호 확인
netstat -anlp | grep [포트번호]
네트워크 관련 명령어 중에서 netstat을 많이 사용하게 되는데 해당 명령어를 사용하지 못하는 경우가 있을 수 있다.
앞서 명령어에서 설명했던 것과 마찬가지로 명령어는 하나의 프로그램이기 때문에 따로 설치 과정이 필요하다.
yum install net-tools
net-tools를 설치해야 네트워크 관련 명령어를 사용할 수 있다.
Q. https://12.12.12.100으로 접속했을 때 접속이 안 되는 이유가 뭘까?
A. 기본적으로 웹 브라우저를 통해서 접속할 때는 기본 포트 번호인 80번 포트로 접속하게 된다. 하지만 https는 http 프로토콜에 SSL 보안 기술이 합쳐진 새로운 프로토콜로 기본 포트 번호가 443으로 다르다. 따라서 현재 80번 포트로 포트 포워딩을 설정하였지만 접속을 443번 포트로 시도하기 때문에 연결할 수 없게 된다.
'리눅스' 카테고리의 다른 글
리눅스 - 권한 (3) | 2023.11.03 |
---|---|
리눅스 - 문서 편집 (0) | 2023.11.02 |
리눅스 - 기본 명령어 (0) | 2023.11.02 |
리눅스 (0) | 2023.11.02 |