[완료]서로 알수 없는 하위 Subnet간의 NFS Mount 시도 문제
안녕하십니까? 허접내기 신규가입한 개발자 입니다.
다름이 아니라
근본적인 문제 해결을 위해서하는것은 아니지만,
당장 시연을 위해 해결하기 위해
VMware와 QEMU(Linux based on ARM)에서 Mount를 시도 하려고 하는데
찾다 삽질하다가 짧은 지식으로 해결점을 찾지 못했습니다.
현재 다음과 같이 성공한 구조는 작동이 됩니다.
조건은 다음과 같습니다.
* A-PC : 192.168.1.130(Linux Host) => NFSD, SUNRPC, 방화벽 작동 해제, NFS를 통해 root filesystem을 제공
* B-PC : 192.168.1.95(Windows Host) => 방화벽 해제
* C-QEMU : 192.168.200.1의 IP를 가진 ethernet device(TAP-Win32 Adapter)를 사용하는 Windows QEMU => 다른 OS를 통해 외부 네트워크 연결 및 인터넷 까지 되는것 확인, D-Linux의 filesystem을 A-PC의 NFS를 사용하도록 kernel command line을 설정
* D-Linux : 192.168.200.15(Embedded Linux) : C-QEMU의 -append 옵션을 통한 kernel command line의 NFS mount정보를 통해 filesystem mount시도
구조는 아래와 같습니다.
[A-PC] [D-Linux]
│ │
└────────(ethernet card)───[B-PC]━━━━━{TAP-Win32 Adapter}━━━━[C-QEMU]
위와 같은 구조에서 D-Linux는 A-PC의 NFS를 통해 filesystem이 mount가 정상적으로 됩니다.
그런데,
아래 구조에서는 안됩니다. 제가 아는 지식선상에서는 다 해봤지만 Mount시 NFS mount timeout이 됩니다.
각 조건은 다음과 같습니다.
* E-VMware : 내부에서는 192.168.18.2의 gateway를 제공하고 Host PC에는 192.168.18.1로 제공합니다. 환경은 NAT로 사용합니다.
F-Ubuntu Linux : 192.168.18.128의 IP를 가지며, 별도의 방화벽 설치 하지 않음, NFSD, SUNRPC 작동중, Ubuntu 7.10을 사용(현재 개발환경이 7.10에 맞춰져서 쓸수 밖에 없음)
* G-PC : 192.168.1.95(Windows Host) => 위 B-PC임.
* H-QEMU : 위 C-QEMU와 같은 것임
* I-Linux : 위 D-Linux와 같은 것임
구조는 아래와 같습니다.
[F-Ubuntu Linux] [I-Linux]
│ │
[E-VMware]─────(VMware Network Adapeter)─────[G-PC]━━━━{TAP-Win32 Adapter}━━━━[C-QEMU]
즉, 위 구조를 보시면 아시겠지만, F-Ubuntu와 I-Linux는 서로 알수 없는 Subnet에 있습니다. G-PC는 각각 알 수 있겠죠.
그래서 찾아보니 VMware에보면 NAT방식으로 사용하는데 여기에서 Port Forwarding을 설정할 수 있게 되어 있습니다.
그래서 SUNRPC와 NFS등 모든 포트에 대해 포트 포워딩을 설정했습니다. 예를 들면,
NFS인 2049포트를 F-Ubuntu Linux의 IP인 192.168.18.128의 2049포트로 포워딩을 설정했습니다.
역시 C-QEMU에 -append 옵션을 통하여 kernel command line에 F-Ubuntu가 제공하는 NFS정보를 입력하여 mount하도록 했습니다.
그런데, F-Ubuntu Linux까진 찾은거 같은데 timeout이 발생하며 mount를 실패 합니다.
그래서 최종적으로 G-PC의 라우팅 정보가 부족할 수 있단 생각이 들어서 G-PC에 192.168.200.0/255.255.255.0에 대해 192.168.200.1(TAP-Win32 Adapter)로 보내도록 하였습니다.
그러나 역시나 결과는 같네요.
이 문제 어떻게 해결해야 할까요? 뭐가 빠진건가요? 도와주세요 ㅡㅜ
P.S cygwin에서 QEMU를 작동시켜서 로그를 남겼는데 메모장에 옮기니 이상하네요 ㅎ
그리고 추가로 vmware port forwarding한 스샷도 같이 첨부 합니다.
커널 로그 중에 중요사항에 대해서는 특정 글로 교체 했습니다. 이해하시는데에는 무리가 없을 겁니다. (-_-)(_ _)(-_-)
첨부 | 파일 크기 |
---|---|
![]() | 17.94 KB |
![]() | 34.94 KB |
참고로....
Windows에서 route print하면 다음과 같습니다.
여기에서
192.168.200.1 255.255.255.255 127.0.0.1 127.0.0.1 30
이 녀석을 지우기 위해 route delete 192.168.200.1을 했는데도 안되네요...ㅡ;; 어떻게 하면 지울 수 있을까요?
겨우 아직 6년간 linux 헤딩이다 ㅡㅡ;
[자답]해결했습니다. 그래서 댓글 남깁니다.
제가 NFS를 잘 몰라서 빼먹은것이 화근이네요..ㅡㅡ;
에효 이것때문에 며칠 고생했습니다.
NFS는 부팅할 때, RPC번호에 대해 mount를 할 tcp/ip포트가 정해 집니다. 기본적으로 NFS에서 사용하는 기본 RPC는 100003과 100005입니다.
이 RPC에 대해 mountd가 사용할 tcp/ip포트가 정해집니다.
Port Forwarding에서
NFS와 sunrpc(portmap)이 사용하는 2049와 111포트외에
이 mountd 포트도 추가 해야 합니다.
우분투에서 이 포트를 확인할 수 있는 방법은
$rpcinfo -p 를 통하여 mountd가 사용할 포트가 뭔지 알 수 있습니다.
이 포트들을 VMWare의 Port Forwarding하는곳에 추가하면
잘 돌아가고, 접속할 NFS Server는 QEMU쪽에서 직접 알수 없으므로 Forwarding되어 볼 수 있는 Windows Host PC의 IP인 192.168.1.95로 접속을 하니 잘 되었습니다.
그럼 모두들 화이팅입니다.
P.S 그런데 Windows에서는 어떻게 해야 내가 원하는 route정보를 삭제할 수 있는건가요? route del 192.168.200.0 mask 255.255.255.0 이렇게 하니까 안되던데... 이리해봐도 저리해봐도 제 머리로는 어떻게 해야할지 모르겠네요 ㅡㅜ
겨우 아직 6년간 linux 헤딩이다 ㅡㅡ;
아 추가로 VMWare에 대해 다양한 시도에 대해 짧막히 남깁니다
아시는 분들이야 잘 아시겠지만
제가 이번에 저 구조가 안되어서 VMWare의 Network사용방식을 Bridge형식으로도 해보고,
Host only도 해봤습니다.
하면서 생각도 해봤는데
Bridge의 경우 VMWare의 Gateway가 Windows PC의 Gateway와 같기 때문에 QEMU쪽으로 패킷이 날라가지 않을 수 밖에 없고
망이 달라 VMware의 Gateway를 QEMU쪽으로 보내려고 하니 VMware쪽에서 알수 없는 망으로 인식이 되어 위 구조를 꾸리고자 할때 무용지물이였습니다.
Host only의 경우 NAT경우와 같이 port forwarding해주니까 되네요.
그래도 이왕이면 다홍치마라고, VMWare도 인터넷이 되는 녀석이 좋겠죠?
그래서 전 VMware의 Network Connection옵션을 NAT로 사용합니다.
아 또! 그리고 host only사용할때 포트포워딩을 설정하기 위해 NAT를 사용할 VMnet host 디바이스를 원래 NAT를 사용하던 device로 옮겨야 Network Connection 의 옵션을 원래대로 NAT로 설정 할 수 있습니다.
저의 경우 VMnet host를 VMnet1에서 VMnet8로 변경하였습니다.
혹시 windows 방화벽을 활성화 시키시는 분은 역시나 방화벽쪽에도 사용할 포트를 오픈해야 하지 않을까 생각합니다.
혹시하 하는 마음에 주저리 주저리 많이 떠들고 갑니다.
겨우 아직 6년간 linux 헤딩이다 ㅡㅡ;
잘 봤습니다....전에
잘 봤습니다....전에 버쳘박스에서 브리지 설정하느라 삽질하던 기억이 새록새록...ㅎㅎ
난이도는 최하 였겠지만...지금도 저에겐 어렵다는.....ㅠㅠ
댓글 달기