Cloud Platform/Oracle Cloud

[OCI / LINUX] 콘솔과 소켓 통신 하기 (포트 여는 방법) No route to host

코끼리 개발자 2022. 12. 8. 17:35
728x90
SMALL

인스턴스를 생성하고, 소켓 통신 또는 데이터베이스에 접속하기 위해 

VCN 설정에서 INGRESS와 EGRESS 설정을 하게 되는데,

Oracle Database 카테고리의 Oracle Base Database (VM, BM) 을 통해 oracle 데이터베이스를 생성하고,

oracle base VM 서버와 통신을 하려고 하는데.. Oracle Database VM과 통신이 안되는 현상이 지속적으로 발생했다..

 

 

 

카테고리는 OCI이지만, Linux 환경에서도 공통적으로 적용되는 내용이다!

 

 

 

에러는 No route to host 가 발생했고, 이 에러가 발생했을 시 보통 리눅스의 해결 방법은 이러하다.

- 방화벽이 꺼져있는지 확인한다.

$ systmectl status firewalld

● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
   Active: inactive (dead)
    Docs: man:firewalld(1)

 

 

- 켜져있다면, 방화벽을 꺼준다.

<opc 계정 혹은 sudo 실행 권한이 있는 계정에서 수행>

$ sudo systemctl stop firewalld

$ sudo systemctl disable firewalld

 

 

-만일 'Loaded: masked (/dev/null; bad)'가 발생할 경우, 아래 커맨드를 수행 해 준다

$ sudo systemctl umask --now firewalld

 

 

 

 

일단 여기까지 방화벽을 서버와 클라이언트 모두 해제해줬는데도 통신이 불가능 하다면 

VCN 설정을 확인하게 될 것이다.

근데 아무리 봐도 Egress와 Ingress 설정이 너무너무 잘 되어있다 8903포트를 쓰고싶었고,

설정도 되어있는데 도대체 왜!! 안되는가!!

 

VM 인스턴스 였다면, 여기까지 잘 설정해 주면 통신이 잘 될것이다.... 하지만 Oracle Database VM은 달랐다..!

 

 

 

아까 위에서 'Loaded: masked (/dev/null; bad)' 가 되어있는 이유가 여기서 나온다..

iptables와 충돌나지 않기 하기위해서는 firewalld를 중지시키고, 마스킹을 등록하여야 했던 건데

이 곳에서는 이미 iptables를 사용하고 있었기 때문에 마스킹 등록이 되어있었던 것이다...

때문에 위에서 umask를 진행하셨다면 다시 mask를 해 주어야 한다.

마스킹이 된 firewalld는 실수로 방화벽을 실행시키더라도 실행이 되지 않기 때문에 안전하다.

 

 

- 방화벽 Mask 하기

<opc 계정이나 sudo 권한이 있는 계정에서 실행 (root권한으로 실행할 수 있기 때문에)>

$ sudo systemctl mask firewalld

 

-iptables 명령어 존재하는지 확인

$ iptables

iptables v1.4.21: no command specified
Try `iptables -h' or 'iptables --help' for more information.

 

iptables 커맨드를 실행시켰을 때, 위와 같이 출력된다면 iptables가 있는것이지만 없다면 설치 해 줘야 한다.

 

- iptables 설치 ( 이미 있으면 skip)

<opc나, sudo 권한이 있는 계정에서 실행 (root로 실행해야 하기 때문)>

$ sudo yum install iptables

또는

$ sudo yum install iptables-service

 

 

 

- 설치가 완료 후 iptables파일에 내가 사용할 포트를 추가 

<opc나, sudo 권한이 있는 계정에서 실행 (root권한이기 때문)>

$ sudo vi /etc/sysconfig/iptables

 

 

- open 하고자 하는 port 추가

/etc/sysconfig/iptables 파일에는 아래와 같은 내용들이 적혀있다.

이 때 -A INPUT -p tcp -m --state 이 부분을 복사해서 내가 쓰고싶은 포트와 함께 추가 해 줄것이다.

--dport옵션 뒤 내가 사용하고 싶은 포트를 추가하면 된다.

파일을 열어 수정하는 것이 복잡하다면 명령어를 통해 추가할 수 있다. 

변경 후에 save는 필수로 해 주어야 한다.

 

해당 포트를 입력하고 설명없이 포트만 추가하는 커맨드
$ sudo iptables -A INPUT -p tcp --dport [원하는 포트] -j ACCEPT

해당 포트를 입력하고 설명을 추가하는 커맨드 
$ sudo iptables -A INPUT -p tcp --dport [원하는 포트] -j ACCEPT -m comment --comment "설명"
$ service iptables save

 

 

- iptables 재 시작

파일로 저장한 사람도, 명령어로 포트를 추가 한 사람도 iptable을 재 시작 해주어야 한다

$ service iptables restart

 

- iptable 확인

추가된 iptables의 리스트를 확인해 추가한 포트가 출력되면 완료!!이다

$ sudo iptables -nL

 

 

 

 

 

 

 

 

더 자세한 iptables의 옵션들은

https://veneas.tistory.com/entry/Linux-iptables-%ED%8A%B9%EC%A0%95-%ED%8F%AC%ED%8A%B8-%EC%97%B4%EA%B8%B0-%EB%8B%AB%EA%B8%B0-iptables-%EC%82%AC%EC%9A%A9%EB%B2%95

 

[Linux] iptables 특정 포트 열기 / 닫기 (iptables 사용법)

목차 1. iptables 란 - 리눅스의 패킷 필터링(Packet Filtering) 도구로서 방화벽 구성이나 NAT(Network Address Translation)에 사용합니다. - 패킷 필터링 기능을 사용해 지나가는 패킷의 해더를 보고 그 전체 패

veneas.tistory.com

 

이분의 포스팅을 참고하면 좋을 것 같다 엄청 자세하게 잘 설명 되어있다

 

728x90
LIST