글 수 369
SVN+SAMBA에 대한 글을 쓰고나니, 문득 외부에서 작업할 때는 삼바서버 접속이 되지 않은 문제점이 생각나 추가로 적어본다.
내가 만난 몇몇 프로그래머나 개발자들은 윈도우 파일 공유가 내부 서브넷에서만 접속되는 줄 안다. ㅡ.ㅡ;;
NetBios 기반이지만 CIFS가 되면서 TCP/IP로 변경된 줄은 잘 모르더라 .....;;
그 이유가 아마도 보안에 취약하고, 웜에 걸리기 쉬워서 ISP업체에서 대부분 해당 포트를 막아버렸기 때문에 그런 인식이 생긴 듯 하다.
알고 있겠지만 CIFS/SMB가 사용하는 139와 445 port는 Windows 환경에서는 변경할 수 없다.
그래서 해당 포트가 막혀있다면 대략 난감하다.
그래서, 본인이 사용하는 꼼수를 소개하고자 한다. 일반적으로 사용하는 rinetd 프로그램을 이용한
Port redirect 방법이다. XShell이나 PuTTy같은 SSH Client에서 제공하는 터널링을 사용해도 되겠지만
SSH protocl 때문에 속도가 많이 느리다는 단점이 있다.
본인이 소개하고자하는 것은 실제 사용하고 있는 방법에 대해서 기술해보고자 한다.
이상이 본인이 예전에 사용했던 139, 445 Port가 막혀있을 때 SMB Derive를 연결하기 위해 사용했던 방법이다. 시작 스크립트를 수정해서 OS 시동시 시작프로그램이나 레지스터리에 등록하면 , 로그인 시 자동으로 연결되게 할 수 있다.
본인은 수동으로 접속하는 게 좋아서 이렇게 사용하고 있다.
내가 만난 몇몇 프로그래머나 개발자들은 윈도우 파일 공유가 내부 서브넷에서만 접속되는 줄 안다. ㅡ.ㅡ;;
NetBios 기반이지만 CIFS가 되면서 TCP/IP로 변경된 줄은 잘 모르더라 .....;;
그 이유가 아마도 보안에 취약하고, 웜에 걸리기 쉬워서 ISP업체에서 대부분 해당 포트를 막아버렸기 때문에 그런 인식이 생긴 듯 하다.
알고 있겠지만 CIFS/SMB가 사용하는 139와 445 port는 Windows 환경에서는 변경할 수 없다.
그래서 해당 포트가 막혀있다면 대략 난감하다.
그래서, 본인이 사용하는 꼼수를 소개하고자 한다. 일반적으로 사용하는 rinetd 프로그램을 이용한
Port redirect 방법이다. XShell이나 PuTTy같은 SSH Client에서 제공하는 터널링을 사용해도 되겠지만
SSH protocl 때문에 속도가 많이 느리다는 단점이 있다.
본인이 소개하고자하는 것은 실제 사용하고 있는 방법에 대해서 기술해보고자 한다.
-
클라이언트 준비 (참고로 윈7 환경에서의 설명이다. ㅡ.ㅡ;;)
-
MS Loopback Adapter 설치
장치관리자에서 "동작" 메뉴 항목( 혹은 ROOT Icon의 팝업메뉴)의 레거시 하드웨어 추가 하위 메뉴 항목을 선택한다.
목록에서 직접 선택한 하드웨어 설치 선택
네트워크 어댑터 선택
제조업체 : Microsoft, 네트워크 어댑터 : Microsoft Loopback Adapter 선택
-
등록한 Interface 이름을 변경한다.
"로컬 영역 연결 2" 등으로 사용된 이름을 "loopback" 등의 구분하기 쉬운 이름으로 변경한다.
차후 Windows Shell Script에서 사용하기 위함이다.
Loopback Adapter의 속성 (등록정보)에서
Internet Protocol Version 4(TCP/IPv4) - XP 에서는 인터넷 프로토콜 (TCP/IP) 일 것이다.를 제외하고 체크된 것을 모두 해제한다.
Microsoft Network용 클라이언트
Internet Protocol Version 4(TCP/IPv4)의 [속성]창 을 열어서 [고급] Button click -> [WINS] Tab으로 이동
[LMHOSTS 조회 가능] 체크 해제
[NetBIOS over TCP/IP 사용 안함] 선택
"LMHOSTS 조회 가능" 이 체크되어 있고, "NetBIOS over TCP/IP 사용" 으로 선택되면, rinetd에서 port bind가 되지 않는다.
IP 정보를 Internet Protocol Version 4(TCP/IPv4)의 [속성] 창에서 수정하거나, Command나 실행 창에서 netsh로 IP 정보를 수정한다.
netsh -c int ip set address name="loopback" source=static addr=172.16.1.1 mask=255.255.255.0 -
rinetd을 다운 받아 적당한 디렉토리(ex : d:smb-foward )에 압축을 해제해 둔다.
rinetd.exe 실행 파일만 사실상 필요하다. 나머지 파일은 삭제해도 된다.
rinetd configure file(rinetd.conf)을 생성한다. - 자세한 설명은 rinetd 홈페이지에서 ..
예제로 서버 IP가 192.168.1.1 이고 도메인이 smb.office.com이라고 할 때, 139 Port는 5139, 445 Port는 5445로 예를 들겠다.172.16.1.1 139 192.168.1.1 5139콘솔 창에서 rinetd.exe -c rinetd.conf 를 입력한다. 윈도우7의 경우 445 Port에서 Bind 오류가 발생한다.
172.16.1.1 445 smb.office.com 5445 - 서버의 도메인명이나 IP 주소 둘 다 지원한다.
해당 포트를 OS에서 이미 점유하고 있어서 발생하는 문제라고 한다.
2가지 방법이 있는 데, 하나는 445 Port를 포기하고 서버의 삼바 config 파일에 [golbal] 섹션에 smb ports = 139로 변경하는 방법.
또 하나는 LocalSMB.exe 파일을 받아 강제로 해제하는 방법이다.
Disable local CIFS/SMB를 체크하고 re-booting 하면 된다.
클라이언트의 기본적인 준비는 끝났다.
-
-
서버 포트 포워딩 설정
- 서버가 공유기 등으로 연결되어 있다면, 공유기에서 포트 포워딩(port redirect 기능이 있는 경우)을 하면 아래 내용은 무의미하다.
-
rinetd 리눅스 버전 설치
Config File 생성
0.0.0.0 5139 127.0.0.1 139chkconfig에 등록해야하고, 시동 및 정지 스크립트 등을 만들어야 하고 등등 관리가 귀찮아서 본인은 iptables를 이용한다. ㅡ.ㅡ
0.0.0.0 5445 192.168.1.1 445 -
iptables를 이용하는 경우
iptables -t nat -A PREROUTING -p tcp -m tcp --dport 5139 -j REDIRECT --to-port 139
iptables -t nat -A PREROUTING -p tcp -m tcp --dport 5445 -j REDIRECT --to-port 445
본인은 단순 무식하게 /etc/sysconfig/iptables 파일을 수정해서 썼다 ㅡ.ㅡ;; 방화벽은 알아서 풀어주세욤 ;;;
*nat
:PREROUTING ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
#-- SAMBA port porward
-A PREROUTING -p tcp -m tcp --dport 5139 -j REDIRECT --to-port 139
-A PREROUTING -p tcp -m tcp --dport 5445 -j REDIRECT --to-port 445
COMMIT
-
클라이언트 스크립트 생성
-
hidden start 다운 : http://www.ntwind.com/software/hstart.html
rinetd 실행 시 콘솔창이 떠 있는 게 싫다면 hstart로 rinetd를 실행하면 background mode로 동작한다.
-
시동 스크립트 : start.cmd
@echo off
rem 기존 Network driver 해제
@net use x: /d /YES
rem 기존 rinetd가 있다면 강제 종료
@taskkill /F /IM rinetd*
rem 비활성 loopback Interface 활성화
netsh interface set interface name="loopback" admin=ENABLED
rem rinetd 디렉토리 이동
D:
cd smb-foward
cls
rem loopback 활성화 후 지연 때문에 바로 연결되지 않음
echo Connecting ...
hstart.exe /NOCONSOLE /DELAY=5 /ERR="An error occurred." "rinetd.exe -c rinetd.conf"
IF %ERRORLEVEL% NEQ 0 GOTO ERR
rem 자동으로 x: 드라이브로 연결시킨다.
rem net help use 참고 - 보안상 이유(ㅡ.ㅡ;;) 로 password 입력을 *로 해두면
rem 비밀번호 입력을 받는다.
rem /PERSISTENT:YES 영구 접속한다.
net use x: 172.16.1.1{Samba Account} * /PERSISTENT:NO
IF %ERRORLEVEL% NEQ 0 GOTO ERR
rem 네트워크 드라이브로 연결되면 자동으로 해당 드라이버를 탐색기로 연다.
%windir%explorer /e, x:
GOTO END
:ERR
rem 오류 확인을 위해 잠시 멈춤
pause
rem rinetd 강제 종료, loopback 비활성화
@taskkill /F /IM rinetd*
@netsh interface set interface name="loopback" admin=DISABLED
:END
-
종료 스크립트 : shutdown.cmd
@echo off
net use x: /d /YES
taskkill /F /IM rinetd*
netsh interface set interface name="Loopback" admin=DISABLED
pause
-
hidden start 다운 : http://www.ntwind.com/software/hstart.html
이상이 본인이 예전에 사용했던 139, 445 Port가 막혀있을 때 SMB Derive를 연결하기 위해 사용했던 방법이다. 시작 스크립트를 수정해서 OS 시동시 시작프로그램이나 레지스터리에 등록하면 , 로그인 시 자동으로 연결되게 할 수 있다.
본인은 수동으로 접속하는 게 좋아서 이렇게 사용하고 있다.