1. OpenVPN Server 설치


http://openvpn.net/index.php/open-source/downloads.html


Windows XP를 이용할 경우 openvpn-install-2.3.0-I001-i686.exe 를 설치한다.


2. Server Key 생성


참고: http://jaesoo.com/index.php?mid=study_board&document_srl=7622


1) c:\program files\openvpn\easy-rsa 폴더로 이동


2) init-config.bat 파일 실행


3) texteditor로 vars.bat 파일을 열어 파일 맨 하단부에서 다음 부분을 찾는다.


set KEY_̲COUNTRY=US

set KEY_̲PROVINCE=CA

set KEY_̲CITY=SanFrancisco

set KEY_̲ORG=FortFunston

set KEY_̲EMAIL=mail@host.domain


4) 여기서 다음과 같이 수정


set KEY_̲COUNTRY=KR

set KEY_̲PROVINCE=Seoul

set KEY_̲CITY=Seoul

set KEY_̲ORG=your_org_name

set KEY_̲EMAIL=foo@foo.com



5) DOS Command 창으로 c:\program files\openvpn\easy-rsa 폴더에 들어가서 다음을 차례대로 실행


vars.bat 실행

clean-all.bat 실행

build-ca.bat 실행


그냥 ENTER를 계속 누르되 common name/host name은 server로 입력. 잘못 입력했으면 다시 build-ca.bat를 실행하여 입력


6) 서버 인증서 생성


DOS Command 창으로 c:\program files\openvpn\easy-rsa 폴더에 들어가서 다음을 실행


build-key-server server


- 그냥 ENTER를 계속 누르되 common name/host name은 server로 입력

- A challenge password는 적당한것을 입력

- y/n을 묻는 부분에서는 무조건 y


7) 클라이언트 인증서 생성


DOS Command 창으로 c:\program files\openvpn\easy‒rsa 폴더에 들어가서 다음을 실행


build‒key client


- 그냥 ENTER를 계속 누르되 common name/host name은 client로 입력

- A challenge password는 적당한것을 입력

- y/n을 묻는 부분에서는 무조건 y


※ 접속할 사용자가 여러명이면 다음과 같이 인증서를 여러개 만들 수 있다.


ex)

build-key fermi

build-key vpn


8) DH 파라메터 생성


DOS Command 창으로 c:\program files\openvpn\easy‒rsa 폴더에 들어가서 다음을 실행


build-dh.bat


9) 인증서 생성 마무리


c:\program files\openvpn\easy-rsa\keys에서 다음의 파일들을 c:\program files\openvpn\config 디렉토리에 복사


- ca.crt

- dh1024.pem

- server.crt

- server.key


다음의 파일은 클라이언트에서의 사용을 위해 별도로 저장해둔다.

(아무나 막 사용할 수도 있으므로 안전하게 저장해 두는 것이 좋다.)


- ca.crt

- client.crt

- client.key



3. VPN 서버 환경 설정


c:\program files\openvpn\sample‒config에서 server.ovpn 파일을 복사하여 c:\program files\openvpn\config 폴더에 복사한다.


4. 방화벽 해제 (8. Server의 NAT 설정을 수행할 경우 필요 없음)


Windows 방화벽이 설정되어져 있다면 다음과 같이 예외설정을 해준다.


이름: OpenVPN

프로토콜: UDP

포트번호: 1194



5. VPN 서버 실행


시작 > 프로그램 > OpenVPN > OpenVPN GUI 실행 (오른쪽 하단에 빨간색 아이콘이 생긴다)


오른쪽 버튼을 눌러 Popup Menu를 띄우고 Connect버튼을 누른다.


녹색으로 변신하면 OK, 실패했다면 c:\program files\openvpn\easy‒rsa\keys 폴더를 지우고 2. Key 생성을 처음부터 다시 한다.


6. 서버를 자동 실행시키고 싶은 경우

제어판 > 관리도구 > 서비스 > OpenVPN 자동실행으로 변경


7. 접속된 클라이언트의 모든 트래픽을 VPN 서버로 보내기


c:\program files\openvpn\config\server.ovpn 파일에 다음 부분을 찾아서 추가한다.


;push "redirect-gateway def1 bypass-dhcp"


push "redirect-gateway def1 bypass-dhcp"


(클라이언트의 모든 트래픽을 VPN으로 우회)


클라이언트 IP를 할당할 때 DNS를 지정하고 싶으면 다음 부분을 찾아서 추가한다.


;push "dhcp-option DNS 208.67.222.222"

;push "dhcp-option DNS 208.67.220.220"


push "dhcp-option DNS 8.8.8.8"


(Google DNS로 지정)


8. Server의 NAT 설정


참고: http://www.nanodocumet.com/?p=14


클라이언트의 모든 트래픽을 VPN으로 우회한 후, 인터넷이 되도록 하기 위해서는 서버의 NIC에 NAT 설정을 해주어야 한다.

(The OpenVPN server machine may need to NAT or bridge the TUN/TAP interface to the internet in order for this to work properly.)


Windows XP의 자체 NAT 기능을 설정하기 위하여 다음을 진행한다.

(Follow these steps to have your Windows XP to work as a NAT but without the restrictions of ICS (Internet Connection Sharing)


1) Requirements:


A. To have two network cards:


NIC1: One connected to the internal network (any network not only 192.168.1.0).

NIC2: The other one connected to the Internet (or other network you want to connect to)


B. To have administrative access to stop/start some services.


2) Steps:


A. Disable ICS on both NICs.


Right-click on NIC -> Properties -> Advanced. Make sure Allow other network users to connect through this computer’s Internet connection is unchecked.


B. Enable Routing and Remote Access Service.


Control Panel -> Administrative Tools -> Services. Enable Routing and Remote Access


C. Disable Firewall/ICS Service (which might take precedence over step 1)


Control Panel -> Administrative Tools -> Services. Disable Windows Firewall/Internet Connection Sharing (ICS)


D. Configure the NICs:


Only 1 should have a gateway (In my example is NIC2). Disable the gateway on the other NIC (NIC1)


Add the NAT configuration.

- You still need to find out the name of your network cards. Here are presenting them as NIC1 and NIC2. In reality they could be something like “Local Area Connection”


type the command "netsh"


netsh


pushd routing ip nat

uninstall

install

set global tcptimeoutmins=1440 udptimeoutmins=1 loglevel=ERROR

add interface name="NIC2" mode=FULL

add interface name="NIC1" mode=PRIVATE

popd



9. OpenVPN 클라이언트 설치


- iOS 와 Android 디바이스들은 App Store 와 Market 에서 다운로드

- Mac OS X 용 클라이언트: http://code.google.com/p/tunnelblick

- Windows: http://openvpn.net/index.php/open-source/downloads.html


10. 클라이언트 환경설정


1) Key 복사


2의 8)에서 저장해둔 ca.crt, client.crt, client.key파일을 c:\program files\openvpn\config 폴더에 복사한다.


2) 환경설정


c:\program files\openvpn\sample-config에서 client.ovpn 파일을 복사하여 c:\program files\openvpn\config 폴더에 복사한 후 Notepad로 열어 다음의 부분을 찾는다.


# The hostname/IP and port of the server. # You can have multiple remote entries

# to load balance between the servers

;remote my‒server‒1 1194

;remote my‒server-2 1194


여기서 아래와 같이 my-server-1을 접속하고자 하는 서버의 domain name 또는 IP Address로 적어준 후 파일을 저장한다.


remote vpn.xxx.net 1194


3) 환경설정 적용


대부분의 클라이언트에서 다음 파일들을 import 할 수 있다.


ca.crt

client.crt

client.key

client.ovpn



11. Ubuntu 에서 OpenVPN Server 설치


NAT 면에서 Ubuntu Server LTS 최신 버전을 이용하는 것이 Windows 보다 잇점이 있다.


https://help.ubuntu.com/12.04/serverguide/openvpn.html


http://openvpn.net/index.php/open-source/documentation/howto.html#redirect

http://blog.wains.be/2008/07/18/openvpn-routing-all-traffic-through-the-vpn-tunnel/

http://codeghar.wordpress.com/2012/05/02/ubuntu-12-04-ipv4-nat-gateway-and-dhcp-server/


On Linux, you could use a command such as this to NAT the VPN client traffic to the internet:


1) Enable IP forwarding


/etc/sysctl.conf 파일을 열어서 “net.ipv4.ip_forward” line을 찾아 set it to 1


# Uncomment the next line to enable packet forwarding for IPv4

net.ipv4.ip_forward = 1


2) iptable 수정을 자동으로 하기


/etc/rc.local 파일을 열어서 exit 0 줄 위에 다음 한 줄을 추가

/sbin/iptables --table nat -A POSTROUTING -o eth0 -j MASQUERADE


/sbin/iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE

exit 0




Posted by fermi
TAG NAT, OpenVPN, vpn

댓글을 달아 주세요

하나의 공인 IP를 공유하는 NAT 환경에서 동일한 서버에 여러개의 도메인을 갖는 웹사이트들을 호스팅하는 경우에는 기본적인 virtual hosts 설정으로 처리가 가능하지만, 도메인에 따라 각각 다른 서버에서 동일한 포트를 사용하는 웹 호스팅을 한다면 일반적인 포트 번호 기반의 NAT로는 구현이 불가능하다. 이 경우 호스트 네임에 따라 포트 포워딩을 하는 것이 필요하다.

아래는 NAT에서는 80포트를 하나의 서버로 포워딩하고, 도메인 이름에 따른 분류는 Apache의 reverse proxy를 이용하는 virtual hosts 설정 방법이다.

Configuring Apache virtual hosts for NAT

http://jeffbaier.com/articles/configuring-apache-virtual-hosts-for-nat

VirtualHost Examples
http://httpd.apache.org/docs/2.2/vhosts/examples.html

- Apache 의 reverse proxy feature 사용
- proxy 모듈

# Ensure that Apache listens on port 80
Listen 80

# Listen for virtual host requests on all IP addresses
NameVirtualHost *:80

<VirtualHost *:*>
 
DocumentRoot /www/example1
  ServerName www.example.com

</VirtualHost>

<VirtualHost *:*>
  ProxyPreserveHost On
  ProxyPass / http://192.168.111.2/
  ProxyPassReverse / http://192.168.111.2/
  ServerName hostname.example.com
</VirtualHost>


또는

# Listen for virtual host requests on all IP addresses
NameVirtualHost *

<VirtualHost *>
 
DocumentRoot /www/example1
  ServerName www.example.com

</VirtualHost>

<VirtualHost *>
  ProxyPreserveHost On
  ProxyPass / http://192.168.111.2/
  ProxyPassReverse / http://192.168.111.2/
  ServerName hostname.example.com
</VirtualHost>

참고: Forward Proxy vs. Reverse Proxy, Controlling access to proxy
Apache Module mod_proxy
http://httpd.apache.org/docs/2.2/mod/mod_proxy.html

Forward Proxies and Reverse Proxies/Gateways

Apache can be configured in both a forward and reverse proxy (also known as gateway) mode.

An ordinary forward proxy is an intermediate server that sits between the client and the origin server. In order to get content from the origin server, the client sends a request to the proxy naming the origin server as the target and the proxy then requests the content from the origin server and returns it to the client. The client must be specially configured to use the forward proxy to access other sites.

A typical usage of a forward proxy is to provide Internet access to internal clients that are otherwise restricted by a firewall. The forward proxy can also use caching (as provided by mod_cache) to reduce network usage.

The forward proxy is activated using the ProxyRequests directive. Because forward proxies allow clients to access arbitrary sites through your server and to hide their true origin, it is essential that you secure your server so that only authorized clients can access the proxy before activating a forward proxy.

A reverse proxy (or gateway), by contrast, appears to the client just like an ordinary web server. No special configuration on the client is necessary. The client makes ordinary requests for content in the name-space of the reverse proxy. The reverse proxy then decides where to send those requests, and returns the content as if it was itself the origin.

A typical usage of a reverse proxy is to provide Internet users access to a server that is behind a firewall. Reverse proxies can also be used to balance load among several back-end servers, or to provide caching for a slower back-end server. In addition, reverse proxies can be used simply to bring several servers into the same URL space.

A reverse proxy is activated using the ProxyPass directive or the [P] flag to the RewriteRule directive. It is not necessary to turn ProxyRequests on in order to configure a reverse proxy.

ProxyRequests Directive 의 default 값은 Off 이므로 따로 설정하지 않아도 된다.

ProxyRequests Directive
Description:    Enables forward (standard) proxy requests
Syntax:    ProxyRequests On|Off
Default:    ProxyRequests Off
Context:    server config, virtual host
Status:    Extension
Module:    mod_proxy



Posted by fermi

댓글을 달아 주세요

2009년 10월에 출시된 VMware Server 2.0.2 는 Windows 7 이 발표된 이후에 출시된 버전이지만 아직 Windows 7을 host OS로 사용할 때 발생하는 NAT 문제 (ping 을 제외한 인터넷이 guest OS에서 작동하지 않는다) 가 해결되지 않았다.

참고로 VMware Server 와 WMware ESXi 는 무료로 라이센스를 배포한다. 두 제품의 차이는 Host OS위에서 작동하는 것과 OS없이 독립적인 Hypervisor로 작동하는 것.

Windows 7 에서 WMware 2.0의 NAT 가 제대로 작동하지 않는 문제의 증상은 다음과 같다.
- 외부에서 들어오는 네트워크 요청 (inbound) 의 port forwading 은 정상적으로 작동하여 서버 프로그램의 운영은 가능
- 외부로 나가는 ping을 제외한 모든 outbound 프로토콜이 작동하지 않아서 guest OS에서 정상적으로 인터넷을 사용하지 못함

검색 결과 Windows 7 을 host OS로 사용할 경우 발생하는 VMware Server 2.0 의 NAT 문제에 대한 포스팅이 다수 발견되었으나 단 한 개의 포스팅 만이 해결 방법을 제시하고 있다. (아래 박스 참조)

Windows 7 - VMWare Server NAT problem
from Windows Seven Forum
http://www.sevenforums.com/virtualization/3850-vmware-server-nat-problem.html

Windows 7 - both X-64 and X-86 NAT Broken
from VMware Communities
http://communities.vmware.com//message/1234305#1234305

Windows 7 Internet Connection Sharing problem with VMware Server 2
from techarena
http://forums.techarena.in/networking-security/1324174.htm

fixing VMWare NAT problems on Windows 7
from florianlr's blog
http://florianlr.wordpress.com/2009/07/09/5/

보고되 해결 방법은 Windows 7의 네트워크 공유 기능을 사용하고 Windows 7에 내장된 ICS의 NAT를 사용하는 것이나, 작동하는 경우도 있고 문제가 생기는 경우도 있다. (위 florianlr's blog의 posting을 참조) 이 방법은 완벽한 해결 방법이 아니며, 실제 테스트 결과 물리적 NIC가 여러 개 일때 심각한 문제 (간혹 작동하기도 하지만, 전체 시스템의 네트워크가 먹통이 되는 문제) 가 발생하여 무시하는 편이 시간 절약에 도움이 되리라...

고심 끝에 생각해 낸 방법은 다음과 같다. 요약하자면 inbound 와 outbound 를 다른 네트워크를 사용하는 것이다. 실험 결과 만족할 만한 신뢰도 및 안정성을 보여주고 있다.

추천하는 해결 방법 - Best Solution


- VM 하드웨어에 2개의 NIC 설정 (1: Bridged, 2: NAT)
- Guest OS에서 NIC 우선순위 (interface metric) 설정 (1: Bridge, 2: NAT)

 또 다른 해결방법으로 (보다 확실한 방법) VMware의 하드웨어 설정에서 NIC를 하나 더 잡고 하나는 NAT 나머지 하나는 Bridged로 설정하여 NAT는 inbound, Bridged는 outbound 용도로 사용하면 inbound는 VMware의 NAT 설정을 따르고, 문제가 되던 outbound는 Bridged 네트워크를 통해서 정상 작동할 수 있다. 다만 이 경우는 Bridged network에 할당할 여분의 IP 리소스가 필요하다. 또한 guest OS에서 NAT와 Bridged network의 순서를 지정해야 한다. Ubuntu에서는 Bridged network을 첫 번째 NIC로 먼저 잡아 주고, NAT를 두번째로 잡아주면 우선 순위가 Bridged에 먼저 할당되어 outbound가 정상적으로 작동하였다. Windows 계열의 Guest OS에서는 Advanced TCP/IP Setting 에서 Interface metric을 수동으로 설정할 수 있다. (ex: Bridged에 1, NAT에 2를 설정)

Windowx 7의 Interface metric 설정

<Windowx 7의 Interface metric 설정>


이와 같이 interface metric을 설정하게 되면, outbound의 네트워크 연결은 우선순위에 따라 bridged network (interface metric: 1) 을 통하여 연결되어 WMware Server 의 NAT를 우회하므로 문제가 발생하지 않게 된다. 반면 inbound의 네트워크 연결은 host OS의 IP주소를 통하여 요청되므로 WMware server의 NAT를 통하여 guest OS의 NAT network (interface metric: 2) 으로 넘겨지게 되어, WMware server의 NAT 설정을 그대로 사용할 수 있는 장점이 있다.

<추가> Ubuntu 64bit 을 guest OS로 사용하는 환경에서 NAT 가 정상적으로 작동하지 않는 문제점을 발견.

<VMware 2.0.2>

Posted by fermi

댓글을 달아 주세요