OpenVPN 포트포워딩

안녕하세요. 이틀간 삽질과 고민을 해보았지만 해결이 안되어 질문을 올려봅니다.

±---------VPN연결-----VPN서버--------VPN연결-----------+
회사PC-------NAT---------인터넷---------NAT---------- 집PC

그림이 참… 허접해서 죄송합니다.
집과 회사는 각각 다른 NAT에 둘러쌓여있고 OpenVPN과 PF로 구성한 VPN서버에 연결을 해두었습니다.
회사는 10.8.0.10이며 집은 10.8.0.20 이라면 어떤 방법으로 서로간에 통신을 할 수 있으며,
(http://infeat.co.cc/125 제가 쓴 글입니다. VPN서버를 게이트웨이로 활용하고 있습니다.)

또한 외부에서 회사PC에 연결을 할 수 있는지 알고 싶습니다.
기타에서 회사로 연결만 되더라도 만족합니다. 회사에 RDP서버를 만들어두었는데 집에서 사용을 못하고 있습니다…

간단하게 다시 정리하자면

  1. NAT환경 아래에 있는 회사PC에 접근하는 방법.
  2. VPN 연결 된 PC간에 통신을 하는 방법.
  3. WAN에 다이렉트로 연결 된 VPN서버를 활용중입니다.

혹시, FreeBSD의 PF 같은 방화벽에서 포트포워딩을 시키면 가능할까해서 시도 해봤는데 제 스킬이 부족하여 안되는군요…

고수님들의 답변을 기다려봅니다. (_ _)

FreeBSD 쓰시는군요.
좋은 자료 잘 봤습니다.

먼저 회사에서 쓰신다는 client는 윈도우즈에 openvpn으로 NAT밖에
연결되어 있고, 윈도우즈는 디폴트 게이트웨이가 tunnel interface로 되어 있는걸로 이해하고 있는데
제가 맞는지 모르겠습니다.

먼저 집에서 사용하시는 환경에 따라서는 회사에서 집에 있는 PC와 직접 VPN 연결이 가능합니다.
공유기에서 openvpn포트만 집PC로 포워딩해주면 되니까요…

dynamic dns 비스무리한 네이밍 서비스로
각각 NAT안에 있을 경우도 VPN이 가능했던걸로 기억하는데 확실하지 않습니다…

먼저, 말씀하신 환경에서 사용만을 생각한다면…
집PC와 회사PC가 둘 다 외부의 서버에 openvpn으로 연결되었을 경우
설정에 따라 둘사이 통신이 충분히 가능하게 할 수 있습니다.

블로그의 설정을 보아하니
tun 인터페이스를 설정하신거 같은데요.
freebsd쪽에서는 tun0 tun1이 생성되고 각각 회사, 집의 vpn interface와
tunneling되어 있을것 같은데
제 예상이 맞는지 모르겠습니다.

이럴 경우, freebsd에서 두 인터페이스간의 라우팅 테이블을 작성해 주시면
통신 가능하게 됩니다.
다만 그럴 경우, 지금 알려주신 ip 대역의 수정이 필요합니다.
두 vpn이 다른 네트워크여야 라우팅 테이블의 작성이 가능하기 때문이지요.

꼭 같은 네트워크의 주소를 쓰셔야 한다면
두 인터페이스를 브리징하는 방법도 있겠습니다만,
돌아가리라 상상만 할 뿐, 이 방법은 별로 자신이 없네요…

외부에서 회사 PC에 연결하고 싶다고 하셨는데…
여기서 연결이란 무엇을 말씀하시는 걸까요?

RDP만을 말씀하신다면 외부 서버에서 3389번 포트만 포워딩해주면
RDP 사용이 가능하실텐데요…

직접 접근하고자 한다면 어렵지만 밖에 서버 한대 두고 계신다면
수없이 많은 방법이 있지 않을까 싶습니다.

P.S. 회사에서 막힌 특정 포트를 우회하는 목적이시거나,
외부에서 서버를 두고 접속하고자 하신다면
저같으면 openvpn보다 조금은 가벼운 ssh tunnel을 써서
port forwarding을 하는 편이 좋지 않을까 싶습니다.

외부로 나가는 모든 데이터가 밖의 서버를 경유해서 나가는데
인터넷 속도 저하는 없으신지요?

http://souptonuts.sourceforge.net/sshtips.htm

위의 자료가 port forwarding에 대해 잘 설명되어 있는것 같습니다.
읽어보시고 도움되시길 바랍니다.

답변감사합니다.

VPN서버가 광랜에 물려있어서 10~20Mbps 정도는 잘 나와줍니다.
회사 데스크탑에 접근할 수 있다면 이정도 속도로도 충분할거 같아요.
다만… 여전히 접근을 못하고 있습니다;;;

지금보니 freebsd쪽에서는 아이피를 공유하고 계시군요…
포트 포워딩이 꽤 어려우실수 있겠네요…

먼저, 두 PC가 VPN으로 연결되었을 경우,
이런 설정이지 않으신지요?

회사 윈도우 피씨
인터페이스 아이피 = 10.8.0.10/24
터널링 인터페이스 아이피 = 192.168.254.1/24

집 피씨
인터페이스 아이피 = 192.168.1.2/24
터널링 인터페이스 아이피 = 192.168.253.1/24

freebsd
eth0 = 글로벌 아이피
tun0 = 192.168.254.2/24 (회사PC터널링)
tun1 = 192.168.253.2/24 (집PC터널링)

이런 비슷한 설정 아니신지요?

freebsd에도 route가 있는지 모르겠는데…
아래 명령어는 우분투 기준입니다…

sudo route add -net 10.8.0.0 netmask 255.255.255.0 dev tun0 gw 192.168.254.1
sudo route add -net 192.168.1.0 netmask 255.255.255.0 dev tun1 gw 192.168.253.1

이것만 해주면 VPN연결된 회사 집 PC간에는 통신이 가능할 것 같은데요…

다만 VPN이 아니라… 예를 들어서 외부에서 RDP로 접속하신다면
freebsd쪽 아이피 공유하고 있는 firewall 설정으로 3389번 포트를
터널링 인터페이스쪽으로 포워딩하셔야 외부에서 접속이 가능할 듯 합니다.

IPFW로도 한번 해보심이… 전 sysctl에 따로 포워딩 안주고 커널에 주니까 되는것 같기도…?

[code:1vb2esp4]options IPFIREWALL # IPFW 활성화
options IPFIREWALL_VERBOSE # IPFW 의 syslogd(8)을 통해 로그를 출력하도록 해줍니다.
options IPFIREWALL_VERBOSE_LIMIT=100 # IPFW 의 패킷 메시지의 한도를 정해줍니다.
options IPFIREWALL_FORWARD # IPFW 의 패킷 전송 기능을 사용할 수 있도록 합니다.
options IPFIREWALL_DEFAULT_TO_ACCEPT # IPFW 모든 패킷 전송을 허용합니다.
options IPDIVERT # NAT 을 사용하게 해줍니다.[/code:1vb2esp4]

[code:1vb2esp4][root@yongbok ~]# echo "gateway_enable="YES"" >> /etc/rc.conf
[root@yongbok ~]# echo "natd_enable="YES"" >> /etc/rc.conf
[root@yongbok ~]# echo "natd_interface="fxp0"" >> /etc/rc.conf[/code:1vb2esp4]

관심과 답변 감사합니다. ^^

결국 OpenVPN 의 설정에서 client-to-client 옵션으로 해결을 봤습니다.

단지, 집에서 마저도 OpenVPN을 사용해야한다는 불편함만이 남았습니다. ^^

집에서는 OpenVPN 연결없이 FreeBSD(혹은 우분투)를 경유해서 회사로 접근하는 방법을 천천히 살펴보아야겠습니다.