Virtual Box에서 내부 내트워크와 외부 네트워크와의 통신 문제 해결…

학교 과제문제때문에 Virtual Box로 다음과 같은 네트워크를 구성하였다.

사용자 삽입 이미지
 net0 이 바로 Virtual Box에서 구성한 Bridge 구성이고, 나머지 net1 과 net2 는 실습을 위한 내부 네트워크 이다.

 이 네트워크를 구축할 때, 나는 공유기를 사용하고 있었다.

 그리고 라우팅 테이블을 수정해서 모든 노드가 서로 통신이 가능하게끔 하였다.

 그런데 문제가 발생했다.

 바로 외부 네트워크(인터넷)의 연결 부분이었다.

 MyNote, Debian_0, Debian_Another 은 인터넷이 가능하였다. 하지만, Debian_1, Debian_2 은 인터넷이 되지 않았던것….

 이상한 일이었다.

 심지어 인터넷이 안되는 두개의 호스트는 공유기로의 ping도 되지 않았다. 공유기와 같은 네트워크에 있는 net0 에 있는 모든 노드와는 통신이 되는데, 유독 공유기와는 연결이 되지 않았다.

 이유는 다음과 같았다.

 바로 공유기에서 문제가 있었다.

 공유기에서의 라우팅 셋팅을 하지 않았던 것.

 당연한 것이다. 하지만….. 나름 공유기를 믿고 있었는데…자동으로 라우팅 테이블을 작성할 줄 알았던 것이다.(너무 바랬다….)

 공유기에서의 static routing table을 다음과 같이 수정하니 인터넷과 통신이 매우 잘 되었다.

사용자 삽입 이미지
 게이트웨이 192.168.1.7 의 주소는 Debian_0 의 주소이다.

어제 있었던 SECLab 서버 다운관련….

 어제 낮에 SECLab 서버가 다운 됐었다.

 실제로는 지난주 주말인 토요일부터 접속이 되지 않았었다.

 학교 컴퓨터실습실에 서버가 있는 관계로 휴일에 들어가보질 못하다가 월요일인 어제, 실습실에 들어가서 서버상태를 확인할 수 있었다.

 ssh, web, ping ….통신과 관련된 모든 사항이 먹통이었다.

 무슨 일일까….단지 웹서버 하나 돌아가고 있을뿐인데…

 실습실의 상황은 그야말로 깜깜했다..

 서버가 죽어있었던것.

 서버의 전원은 분명 들어있는 상태였다. 하지만 모니터는 까만색 화면이었고, 키보드와 마우스의 어떠한 입력에도 서버는 반응하지 않았다.

 서버 다운이었다.

 도대체 왜 그럴까….서버의 파워를 내리면서 생각했다. (백업받은지 한참됐는데…이런.)

 서버의 파워를 내리고, 다시금 전원을 넣었을때, 평소와 같이 변함없는 모습으로 바이오스 셋업화면이 나왔다.

 그리고, 리눅스의 grub이 실행되기 직전…그러니까, 비프음이 들리고 난 직후.

 서버는 먹통이 되었다.

 몇번을 다시금 살펴보아도 그대로 였다.

 도대체 무엇때문에???

 한참을 끙끙대고 헤메다가, 잠정적으로 고장이 난거다…라고 생각이 되었다.

그러니까…grub으로 주도권이 넘어오기 전, 시스템이 먹통이 되었다는 이야기는, 하드디스크의 고장과는 관련이 없다는 것으로 생각되었다.

 그리고, 모든 하드디스크를 제거하고 부팅을 시도해 보았는데, 역시…오퍼레이팅 시스템이 없다는 메시지가 나타나기도 전에 서버가 먹통이 되었다.

 장비문제인것이다. 그렇다면….시험기간인 지금, 서버 교체 작업을 해야하는건가?? 여러가지 생각들이 들었다.

 교수님께 말씀드렸다. 서버가 고장인듯한데….아마도 장비를 바꾸어야 겠다고.

 교수님왈, “혹시 모르니 청소나 한번 해봐.”

 진공청소기로 구석구석 깨끗이 먼지를 빨아들였다. 솔직히 기대하지는 않았다.

 하지만 웬걸, 먼지를 제거하고 나니…..부팅이 정상적으로 되었다.

 하하하하하……멀쩡한 서버를 먼지때문에 바꿔버릴뻔 했다.

 좋은 경험하나 했다.

 다음부터 서버가 먹통일때, 일단 청소부터…ㅎㅎㅎㅎ

리눅스가 부팅하기까지…..

 컴퓨터에 전원을 넣은 순간부터, 리눅스가 부팅을 완료하기까지는 참으로 여러가지 일들이 컴퓨터 내부에서 일어난다.

 lilo 혹은 grub의 구동에서 부터 커널의 로딩까지…

 다음의 링크에 이에 관한 상세한 설명이 담겨있다.

http://kldp.org/KoreanDoc/html/Boot_Process-KLDP/index.html

어이없는 실수….

 과제로 제출하기 위한 프로그래밍을 하던 도중 이상한 오류를 발견했다…

 숫자인 문자열을 double, 혹은 float 형으로 변환해주는 strtod() 라는 함수를 사용하면서 생긴 오류였는데 도통 원인을 발견하지 못하였었다..

 어떤 문자열을 숫자로 바꾸라고 입력하면….이상하게도 엉뚱한 값과 -nan 이라는 문자열만 출력되는 것이었다.

 nan 이라는 것이 무슨뜻일까…찾아보니 Not A Number 라는 뜻이었다..

 왜 그럴까…

 한참 동안이나 디버깅과 여러가지 데이터 값들을 입력해보고 여러모로 원인을 찾아보았다.

 하지만 코드상의 문제는 보이지 않았다.

 당연했다. 함수하나 불러쓰는 것인데 무슨 문제가 있을려구..

 한참을 찾고 찾다…한 2시간이 흐른뒤….어이없는 실수를 발견했다..

 해당 함수를 쓰기위한 헤더파일을 선언하지 않았던 것…

 하하하하하하……

 그저 웃음만 나온다.

 나름 소스를 깔끔하게 작성한다고 .c 파일과 .h 로 구분해 놓은것이 화근이었다.

 물론 그것이 잘못된 것이 아니었다.

 하지만 헤더파일 구분만 해놓고 헤더파일 선언을 하지 않은 나의 불찰…

 으이구….다음부터는 조심하자..

Virtual Bax 에서 브릿지 구성 이용하기..

 리눅스에서 돌아가는 훌륭한 가상머신 Virtual box!

 하지만 NAT 구성을 사용할 경우 웬일인지 호스트에서 게스트로의 Ping 과 ssh, telnet 접속이 되지 않았다..

 그래서 브릿지 구성을 통하여 문제를 해결했다.

 먼저 임의의 디렉토리에 다음의 스크립트를 작성한다.

startup.sh (Language : perl)
  1. #!/bin/sh
  2.  
  3. brctl addbr br0
  4.  
  5. ifconfig eth0 0.0.0.0
  6. #ifconfig wlan0 0.0.0.0
  7.  
  8. # for wireless lan
  9. #brctl addif br0 wlan0
  10.  
  11. # for wired lan
  12. brctl addif br0 eth0
  13.  
  14. # If you have a dhcp-server uncomment this line
  15. dhclient3 br0
  16. #dhcpcd br0 -A
  17.  
  18. # If you have a static IP uncomment the following lines and
  19. # change the IP accordingly to ypur subnet
  20. #ifconfig br0 192.168.1.110 up
  21. #route add default gw 192.168.1.1
  22.  
  23. # Change your username accordingly
  24. tunctl -t tap0 -u pchero
  25. tunctl -t tap1 -u pchero
  26.  
  27. # Now add the tap-device to the bridge
  28. ifconfig tap0 up
  29. ifconfig tap1 up
  30. brctl addif br0 tap0
  31. brctl addif br0 tap1
  32.  
  33. route add -net 192.168.10.0 netmask 255.255.255.0 br0
  34. route add -net 192.168.100.0 netmask 255.255.255.0 br0
  35.  

 위의 스크립트 파일 구성은 브릿지 네트워크를 사용하는 가상 머신이 두개일 때 사용하는 스크립트이다.

 만약 세개 이상이 필요하다면 원하는 숫자만큼 tap 인터페이스를 늘리고 br0에 붙여서 사용하면 된다.

 다음은 종료시 사용하는 스크립트이다.

stop.sh (Language : perl)
  1. #!/bin/bash
  2.  
  3. # Biring the interfaces down
  4. ifconfig tap0 down
  5. ifconfig tap1 down
  6. ifconfig br0 down
  7. #ifconfig br1 down
  8. brctl delif br0 tap0
  9. brctl delif br0 tap1
  10. #brctl delif br1 tap1
  11. brctl delbr br0
  12. #brctl delbr br1
  13.  
  14. # Now setup your network-interface again
  15. # for dhcp uncommnet the following line
  16.  
  17. # for wired lan
  18. dhclient3 eth0
  19.  
  20. # for wireless lan
  21. #dhclient3 wlan0
  22.  
  23. # For a static IP uncommnet the following lines and change them accordingly
  24. #ifconfig eth0 192.168.10.100
  25. #route add default gw 192.168.10.1 dev eth0
  26.  

 이렇게 만들어진 스크립트를 사용하기 위해서는 다음의 작업들이 더 필요하다.

 먼저 네트워크 세팅에서 호스트 네트워크로 변경한다.

 그런 다음, 호스트 인터페이스 설정에서 설정 프로그램에 startup.sh, 종료 프로그램에 stop.sh, 인터페이스 이름에 설정한 tap0, tap1 을 설정한다. 다음은 설정 예이다.

gksudo /home/pchero/virtual_box/starttun.sh
gksudo /home/pchero/virtual_box/stop.sh

 앞쪽에 붙어있는 gksudo 는 root의 권한으로 사용하기 위한 명령이다.

 ….하지만 나의 경우는 이상하게 gksudo 로 설정을 해도 되지 않았다. 일일이 하나씩 스크립트를 수동으로 실행을 시켜야 되었다..

 왜그럴까….;;;