Vpnc/ko
이 글을 읽는다면 가정에서나 여행중이든 사무실 네트워크망에 연결해야 할 경우일겁니다. 대부분의 회사에서는 Cisco 3000 VPN 집중화 장비를 VPN 기능이 필요한 곳에 활용하고 있고, 대부분의 리눅스 생초보가 윈도우를 사용하도록 강요 받으리라 생각합니다. 글쎄요. 이 문서는 시스코 VPN 장비에 연결하는 방법을 정말 가능하게, 젠투 워크스테이션 내지는 랩톱에서 터널링을 충분히 동작하게끔 하는 방법을 안내합니다.
VPNC is a VPN client compatible with Cisco's EasyVPN equipment. It supports IPSec (ESP) with Mode Configuration and Xauth. Supports only shared-secret IPSec authentication with: Xauth, AES (256, 192, 128), 3DES, 1DES, MD5, SHA1, DH1/2/5 and IP tunneling. VPNC runs entirely in userspace. Only universal TUN/TAP device driver support is needed in kernel.
도입부
This guide describes basic workings of vpnc client. It includes handling IP routing and DNS configuration. The connection terminates on a vendor specific IPSec concentrator Cisco/Juniper.
설치
커널
리눅스에서 VPN 연결을 개방할 수 있으려면 커널에서 Universal TUN/TAP device driver support 항목을 활성화해야합니다. 이게 뭐고 왜 필요할까요? 아래에 커널 설정 상자에서 비교적 간단한 설명을 보여드리겠습니다:
다음 명령을 활용하면 커널에서 TUN/TAP을 지원하는지 확인할 수 있습니다:
root #
grep "TUN" /usr/src/linux/.config
CONFIG_INET_TUNNEL=m # CONFIG_INET6_TUNNEL is not set # CONFIG_IPV6_TUNNEL is not set (TUN/TAP enabled as a module) CONFIG_TUN=m # CONFIG_8139TOO_TUNE_TWISTER is not set
위에서 보신 바와 같이 CONFIG_TUN=m
설정을 통해 모듈로 컴파일합니다. 설정에서 비활성화했다면 커널 항목 선택에서 활성화하고, 다시 빌드하고, 설치하고, 다시 부팅한 후 다음 단계로 넘어가기 전에 여기로 다시 돌아오십시오.
Device Drivers --->
Network device support --->
[*] Universal TUN/TAP device driver support
TUN/TAP 기능을 커널에서 바로 지원하도록 빌드했다면, 다음과 같이 dmesg 출력에서 내용을 살펴볼 수 있습니다.
root #
dmesg | grep TUN
Universal TUN/TAP device driver 1.5 (C)1999-2002 Maxim Krasnyansky
필요 프로그램 설치
Now that a working kernel setup is completed, install the net-misc/vpnc package:
root #
emerge --ask net-misc/vpnc
설정
다음 부분 진행을 좀더 매끄럽게 하려면, 동작하는 환겨에 대한 설정 예제가 필요합니다. 여기 예시를 보여드리기 위해 여러 대의 컴퓨터를 보유했다고 가정합니다. 모든 컴퓨터는 192.168.0.0 / 255.255.255.0 네트워크에 있습니다. 궁금해할 법한 LAN 환경은 iptables 방화벽, DHCP, 캐싱 DNS, 등을 활용하는 젠투 박스로 동작하며, ISP에서 제공하는 공용 IP 주소 너머로 LAN에 매스커레이딩합니다. 사무실에서 VPN을 가동하게 하고 싶은 LAN에 워크스테이션도 있습니다.
Environment variables
Configuration:
- dev -
tun0
ortap0
device
IP address table:
Hostname | Interface | IP address | Gateway | Network description |
---|---|---|---|---|
client1 | eth0 | 192.0.2.10/24 |
192.0.2.1 |
Private or Public |
tun0 | 192.168.255.10/24
|
tun0 |
VPN | |
vpngw.example.org | 203.0.113.2 |
Public - internet | ||
dns1.example.org | 192.168.100.100
|
VPN |
This is a example IP scenario used in this document. For real world usage, change the according IP networking entries.
예제에서 워크스테이션 설정은 다음과 같습니다:
root #
netstat -r
Kernel IP routing table Destination Gateway Genmask Flags MSS Window irtt Iface 192.168.0.0 * 255.255.255.0 U 0 0 0 eth0 loopback desktop 255.0.0.0 UG 0 0 0 lo default router 0.0.0.0 UG 0 0 0 eth0
root #
ifconfig -a
eth0 Link encap:Ethernet HWaddr 00:11:2F:8D:08:08 inet addr:192.168.0.2 Bcast:192.168.0.255 Mask:255.255.255.0 inet6 addr: fe80::211:2fff:fe8d:808/64 Scope:Link UP BROADCAST NOTRAILERS RUNNING MULTICAST MTU:1500 Metric:1 RX packets:3657889 errors:0 dropped:0 overruns:0 frame:0 TX packets:2305893 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:2193722103 (2092.0 Mb) TX bytes:1415104432 (1349.5 Mb) Interrupt:185 Memory:fac00000-0 lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:35510 errors:0 dropped:0 overruns:0 frame:0 TX packets:35510 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:16023838 (15.2 Mb) TX bytes:16023838 (15.2 Mb)
nameserver 192.168.0.1
vpnc
- /etc/conf.d/vpnc - Gentoo's config file for vpnc daemon.
- /etc/vpnc/vpnc.conf - Global (system wide) configuration file.
- /etc/vpnc/work.conf - Conventional filename for additional configuration rules.
이제 vpnc
를 설치했고 동작하는 예제를 적용했으니 vpnc
설정 방법의 기초를 다루어보겠습니다. vpnc
설정 파일은 설정할 프로파일을 얼마나 두느냐에 따라 몇 군데에 놓을 수 있습니다. 기본적으로 vpnc
는 /etc/vpnc/default.conf에서 연결 설정을 찾습니다. 파일이 없으면 /etc/vpnc.conf 에서 찾습니다. 이 설정은 단일 프로파일 예제를 다루며 /etc/vpnc.conf 설정 파일 위치를 활용합니다. /etc/vpnc/default.conf 파일이 없는 지 확인하십시오.
IPSec gateway vpngateway.domain.org
IPSec ID group_id
IPSec secret group_password
Xauth username network_signon
Xauth password network_password
위에서 보여드린 설정 파일 예제를 여러분이 진행하는 설정 과정에서 적당한 값으로 바꾸어야합니다. vpngateway.domain.org
게이트웨이 옵션은 완전한 도메인 이름 또는 IP 주소가 될 수 있습니다. ID와 비밀 옵션은 네트워크 관리자가 제공해야합니다. 만약 이 정보를 제공받을 수 없지만 공식 시스코 VPN 클라이언트를 활용하는 윈도우 머신에서 설정을 보유하고 있다면 해당 프로파일을 내보내기만 하면 됩니다. 사용자 이름 및 암호 옵션은 윈도우 NT 도메인 계정처럼 일반 네트워크 접속에 활용합니다.
윈도우 머신에서 프로파일을 끌어냈다면, .pcf란 파일이 나왔을 겁니다. 이 파일은 필요한 모든 정보가 들어있습니다. 아래는 내용의 예제입니다:
If the authentication credentials cannot be obtained but a working setup on a Windows box is available which utilizes the official Cisco VPN client, then it suffices to export the profile. The user name and password options are for the normal network sign-on, such as a Windows NT domain account. When the profile is exported from a Windows machine, then the result is most likely a file ending in .pcf. This file will have all the necessary information. Below is an example:
[main]
Description=
Host=VPNGATEWAY.DOMAIN.ORG
AuthType=1
GroupName=group_id
GroupPwd=
enc_GroupPwd=F3256220AA200A1D532556024F4F314B0388D48B0FBF2DB12
EnableISPConnect=0
ISPConnectType=0
ISPConnect=FOOBAR
ISPCommand=
Username=
SaveUserPassword=0
UserPassword=
enc_UserPassword=
NTDomain=
EnableBackup=0
BackupServer=
EnableMSLogon=1
MSLogonType=0
EnableNat=1
TunnelingMode=0
TcpTunnelingPort=10000
CertStore=0
CertName=
CertPath=
CertSubjectName=
CertSerialHash=00000000000000000000000000000000
SendCertChain=0
VerifyCertDN=
DHGroup=2
ForceKeepAlives=0
PeerTimeout=90
EnableLocalLAN=0
EnableSplitDNS=1
ForceNetLogin=0
위 예제에서 Host
, GroupName
, enc_GroupPwd
항목을 볼 수 있습니다. Username
및 UserPassword
는 설정에 따라 가져오거나 아니면 가져오지 않을 수도 있습니다. 동작하는 vpnc 설정을 만들려면 vpnc를 넣은 pcf2vpnc
를 활용할 수 있습니다.
Host
,GroupName
enc_GroupPwd
.
The user credentials may or may not be exported depending on the setup:
Username
UserPassword
To generate a working vpnc configuration out of it, use pcf2vpnc
, included with vpnc.
최신 vpnc에 들어있는
cisco-decrypt
프로그램으로 암호 해독 도움을 받을 수 있습니다.Converting the ~/profile.pcf file into a /etc/vpnc/vpnc.conf working configuration using the pcf2vpnc tool:
user $
pcf2vpnc profile.pcf
## generated by pcf2vpnc IKE Authmode psk IKE DH Group dh2 IPSec secret ASD1v5J.a&H.tkfJ IPSec gateway VPNGW.EXAMPLE.ORG IPSec ID group_id ## To add your username and password, ## use the following lines: # Xauth username <your username> # Xauth password <your password>
Service
vpnc 0.4.0-r1에는 다중 설정을 처리하는 초기화 스크립트 파일( /etc/init.d/vpnc )이 있습니다. 기본 스크립트는 /etc/vpnc/vpnc.conf 파일을 찾지만 대부분의 설정에서는 가능한 생각만큼 많은 설정을 보유합니다. 서비스를 내리고 시작하기 전에 별도로 만든 스크립트는 각각의 초기화 스크립트(0.5.1-r1 부터)의 이름과 연동하여 실행할 수 있습니다. 이름은 -preup.sh , -postup.sh , -predown.sh , -postdown.sh로 끝나며, /etc/init.d/scripts.d/ 디렉터리에 들어있습니다. 일반 이름 형식은 다음 표에 적어두었습니다.
초기화 스크립트 이름 | 필요한 설정 파일 | 사전 가동 스크립트 이름 |
---|---|---|
/etc/init.d/vpnc | /etc/vpnc/vpnc.conf | /etc/vpnc/scripts.d/vpnc-preup.sh |
/etc/init.d/vpnc.work | /etc/vpnc/work.conf | /etc/vpnc/scripts.d/work-preup.sh |
OpenRC
다음 명령으로 vpnc를 기본 런레벨에 추가하십시오(이 경우 표준 설정에 한합니다). 잊지 말고 시작시 커널 모듈 자동 적재 기반에(모듈 기반으로 빌드했을 경우) tun 모듈을 추가하십시오.
root #
rc-update add vpnc default
설정 파일에 암호를 저장하지 않게 하려면, /etc/conf.d/vpnc 파일을 편집하여 초기화 스크립트에서 모든 출력 및 프롬프트를 표준 출력으로 내보내게 하십시오. 기본으로 디스플레이 화면 출력을 하지 않는 VPNCOUTPUT 변수를 yes
또는 no
로 설정하십시오.
Set the VPNCOUTPUT variable to yes
to all output and promts for the authentication, entering password on the prompt.
Or leave it at the default setting no
, where its default is to not display screen output.
This way the saved password Xauth password
in the global configuration file /etc/vpnc/vpnc.conf is used.
runit
systemd
설정 시험
이제 제 위치에 설정을 저장했으니 설정을 시험해 볼 차례입니다. vpnc를 시작하려면 다음을 따르십시오:
root #
vpnc
Enter password for username@vpngateway.domain.org: VPNC started in background (pid: 14788)...
명령 출력에서 보시는 바와 같이 (루트 계정으로) vpnc
를 실행하면 암호를 물어봅니다. 암호를 입력하고 나면, 입력한 암호가 나타나지 않는데 vpnc
프로세스는 자동으로 백그라운드 프로세스로 전환합니다.
vpnc
설정 파일에서 Xauth password
옵션을 지정했다면 vpnc
를 시작할 때 암호를 물어보지 않습니다. 또한, vpnc
에서 설정 파일에 지정하지 않은 일부 추가 옵션이 필요하거나 뭔가를 까먹었다면 물어볼테니 걱정하지 마십시오.root #
ifconfig -a
eth1 Link encap:Ethernet HWaddr 00:11:2F:8D:08:08 inet addr:192.168.0.2 Bcast:192.168.0.255 Mask:255.255.255.0 inet6 addr: fe80::211:2fff:fe8d:808/64 Scope:Link UP BROADCAST NOTRAILERS RUNNING MULTICAST MTU:1500 Metric:1 RX packets:2101119 errors:0 dropped:0 overruns:0 frame:0 TX packets:1577559 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:1757862627 (1676.4 Mb) TX bytes:732200131 (698.2 Mb) Interrupt:177 Memory:faa00000-0 sit0 Link encap:IPv6-in-IPv4 NOARP MTU:1480 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:0 (0.0 b) TX bytes:0 (0.0 b) tun0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 inet addr:192.168.160.42 P-t-P:192.168.160.42 Mask:255.255.255.255 UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1412 Metric:1 RX packets:1 errors:0 dropped:0 overruns:0 frame:0 TX packets:9 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:500 RX bytes:60 (60.0 b) TX bytes:616 (616.0 b)
root #
netstat -r
Kernel IP routing table Destination Gateway Genmask Flags MSS Window irtt Iface vpn01.domain.or router 255.255.255.255 UGH 1500 0 0 eth1 192.168.0.0 * 255.255.255.0 U 0 0 0 eth1 loopback desktop 255.0.0.0 UG 0 0 0 lo default * 0.0.0.0 U 0 0 0 tun0
user $
more /etc/resolv.conf
#@VPNC_GENERATED@ -- this file is generated by vpnc # and will be overwritten by vpnc # as long as the above mark is intact # Generated by dhcpcd nameserver 192.168.100.100 search example.org
Verify the vpn configured DNS server is reachable:
user $
ping dns1
PING dns1.example.org (192.168.100.100) 56(84) bytes of data. 64 bytes from dns1.example.org (192.168.100.100): icmp_seq=1 ttl=64 time=2.40 ms 64 bytes from dns1.example.org (192.168.100.100): icmp_seq=2 ttl=64 time=3.44 ms 64 bytes from dns1.example.org (192.168.100.100): icmp_seq=3 ttl=64 time=3.20 ms </div> <div lang="en" dir="ltr" class="mw-content-ltr"> --- dns1.example.org ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2003ms rtt min/avg/max/mdev = 2.404/3.013/3.441/0.442 ms
위의 명령 출력에서 보신 바와 같이 vpnc
에서 다음의 역할을 처리했습니다:
- VPN 터널을 통하는 트래픽을 처리하는 가상 tun0 네트워크 인터페이스를 만듬
- VPN 제공자로부터 tun0 장치의 IP 주소를 가져옴
- VPN 게이트웨이에 기본 라우팅 정보를 설정
여기서, 워크스테이션은 VPN으로 호스트간 통신을 수행할 수 있습니다. vpnc
가 VPN 게이트웨이의 기본 경로를 설정하기 때문에, 추가 경로로 인터넷이나 다른 곳을 따로 지정하지 않아도, 모든 네트워크 트래픽은 VPN을 거쳐 돕니다. 어떤 경우에는 연결 기본 형식으로 충분하겠지만 대부분의 경우 추가 과정이 필요합니다.
VPN 세션을 끝낼 준비가 되었다면 vpnc-disconnect를 실행하십시오. 예제는 아래에 있습니다.
root #
vpnc-disconnect
Terminating vpnc daemon (pid: 26250)
Troubleshooting
Configuration debugging
Use the --debug n
running option to get more verbose output. Following options are available:
user $
vpnc --help
--debug <0/1/2/3/99> Show verbose debug messages * 0: Do not print debug information. * 1: Print minimal debug information. * 2: Show statemachine and packet/payload type information. * 3: Dump everything exluding authentication data. * 99: Dump everything INCLUDING AUTHENTICATION data (e.g. PASSWORDS). conf-variable: Debug<0/1/2/3/99>
Example output of configuration debugging --debug 1
a not working connection session:
root #
vpnc --debug 1 /etc/vpnc/vpnc.conf
</div> <div lang="en" dir="ltr" class="mw-content-ltr"> vpnc version 0.5.3 response was invalid [1]: (ISAKMP_N_INVALID_EXCHANGE_TYPE)(7)
Optionally enable debug output in the /etc/vpnc/vpnc.conf configuration file add follwing line at the last line:
...
Xauth username larry debug 2
See also
- OpenVPN — software that enables the creation of secure point-to-point or site-to-site connections.
- WireGuard — a modern, simple, and secure VPN that utilizes state-of-the-art cryptography.
- VPN services
외부 자료
This page is based on a document formerly found on our main website gentoo.org.
The following people contributed to the original document: David H. Askew, Christian Faulhammer, Thomas Fischer, nightmorph
They are listed here because wiki history does not allow for any external attribution. If you edit the wiki article, please do not add yourself here; your contributions are recorded on each article's associated history page.