안녕하세요.
서버 구성 중 nfs와 포트포워딩 관련해서 궁금한 점이 생겨 문의드리게 되었습니다.
현재 저희 서버는 외부 인터넷과 연결된 서버 1, 2가 있습니다. 또한, 내부망으로 연결된 서버 2, 3, 4가 존재합니다.
즉, 서버 1은 완전히 외부와만 연결된 서버이고, 서버 2는 내외부로 연결된 서버이며, 서버 3, 4는 내부망만 연결되어 있습니다.
제가 진행하고자 하는 일은, 서버 1에 있는 자료를 nfs 서버와 같은 방식으로 공유하고 서버 2, 3, 4의 자체 filesystem에 모두 각각 mount하는 것입니다.
처음에는, 서버 2의 외부망으로 들어온 2049 (rpcbind), 111 (portmapper)과 mountd의 포트를 서버 3, 4의 내부망으로 forwarding하는 것을 고려하였습니다.
-> 서버 2가 eth0을 통해 외부망과, eth1을 통해 내부망과 연결되어 있고, 서버 2의 외부망 ip를 1.2.3.4, 서버 3의 내부망 ip를 192.168.0.3이라고 하면, linux의 서버 2의 iptables에 아래와 같은 규칙을 적어주어 보았는데, 잘 되지는 않았습니다...
1) -A PREROUTING -i eth0 -p tcp --dport 2049 -j DNAT --to-destination 192.168.0.3:2049 (111, mountd 포트에 대해서도 반복)
2) -A PREROUTING -i eth0 -p udp --dport 2049 -j DNAT --to-destination 192.168.0.3:2049 (111, mountd 포트에 대해서도 반복)
3) -A POSTROUTING -o eth1 -j MASQUERADE
물론 위처럼 했을 때 서버 3에서도 잘 되지는 않았지만, 하던 도중 이 방식에는 문제가 있다는 생각이 들었습니다. 먼저 하나의 포트로 들어온 것을 두 개의 포트로 forward해주는 것이 불가능하고, 만약 서버 3과 같은 특정 서버로 외부 포트를 모두 fowarding해주게 되면 서버 2 또한 외부 포트로 들어온 nfs 패킷을 받을 수 없다는 생각이 들었습니다.
혹시 제가 현재 생각하고 있는 것이 잘못된 것이고, 해당 방식이 가능한 것인지, 가능하다면 어떻게 하는 것이 좋을지 알려주시면 감사하겠습니다.
해당 방식이 불가능한 것이 맞다면, 혹시 대책이 있을지도 함께 고민해주시면 정말 감사하겠습니다 ㅠㅠ
https://access.redhat.com/documentation/ko-kr/red_hat_enterprise_linux/6/html/storage_administration_guide/s2-nfs-nfs-firewall-config
이와 별개로, nfs는 외부 인터넷에 노출하기엔 인증 부분이 취약한 서비스라 되도록이면 다른 방법을 강구하는 편이 좋지 않을까 합니다.
또한, 내부망과 외부망을 나눈 이유가 보안의 문제도 있긴 하지만... 저희 팀 상황에서 일단 크게 중요한 문제는 아니라 그건 고려하지 않으셔도 될 것 같습니다.
그래도 혹시 다른 방법이 생각나시는 게 있다면 말씀해주셔도 정말 감사할 것 같습니다!
포트를 열지 말고..
NFS서버가 서버1이라면 반대로 내부망 to 외부망(서버1)로 포워딩을 해야 하는거 아닌가요?
서버 1에서는 보안을 위해 src ip 로 필터링을 하시고,
서버 2에서 내부망에서 들어오는 포트를 서버1로 dnat 하고, 반대는 snat 하면 될거같습니다.
그렇게 해보고 후기 말씀드리겠습니다 ㅎㅎ 감사합니다!