인스턴스를 생성하고, 소켓 통신 또는 데이터베이스에 접속하기 위해
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의 옵션들은
이분의 포스팅을 참고하면 좋을 것 같다 엄청 자세하게 잘 설명 되어있다
'Cloud Platform > Oracle Cloud' 카테고리의 다른 글
[OCI 4편] File system 만들기 (0) | 2022.01.11 |
---|---|
[OCI 3편] Block Storage 추가하기 - 02 (0) | 2022.01.11 |
[OCI 3편] Block Storage 추가하기 - 01 (1) | 2022.01.10 |
[OCI 2편] OCI 키 파일 생성 (0) | 2022.01.10 |
[OCI 1편] OCI CLI 설치 (0) | 2022.01.10 |