DD-WRT에서 OpenVPN을 사용하여 VPN 연결

14157 단어 OpenVPNdd-wrt
DD-WRT는 OpenWRT에서 파생된 컴팩트한 Linux 릴리스입니다.
네트워크 라우터 등의 펌웨어를 다시 쓸 수 있습니다.

할 일


집안의 DD-WRT를 시작으로 벚꽃의 VPS에 오픈 VPN을 사용해 VPN(L3 터널)을 깔았다.
인증은 공유 키 방식을 사용합니다.
터널 건립 후 소통 확인.
※ DD-WRT 자체 도입은 해당되지 않습니다.
※ OpenVPN은 설치된 상태부터 시작합니다.

컨디션


서버(오사카)


  • 벚꽃의 VPS. 1GB 계획
    (CentOS 6.7 x86_64)
  • OpenVPN 버전 2.2.2
  • 고객(도쿄)

  • 무선 LAN 라우터BUFFALO WZR-HP-G300NH2
    (DD-WRT v24SP2-MULTI (06/03/12) std - build 19154)
  • OpenVPN 버전 2.2.1
  • 사전 작업


    공유 키 만들기


    서버나 클라이언트에 공공 키를 생성합니다.$ openvpn --genkey --secret /tmp/static.key다음 형식의 텍스트 파일을 만듭니다.
    #
    # 2048 bit OpenVPN static key
    #
    -----BEGIN OpenVPN Static key V1-----
            (略)
    -----END OpenVPN Static key V1-----
    
    이 파일을 공공 키로 사용합니다.
    서버와 클라이언트에서 같은 키를 사용하기 위해 상대방의 터미널에서도 SCP 등으로 미리 복사합니다.

    설정


    일반 설정


    이것은 서버 클라이언트 쌍방이 지정한 OpenVPN의 매개 변수입니다.
    매개 변수
    값 설정
    메모지
    dev
    tun
    가상 네트워크 장치
    proto
    udp
    통신용 프로토콜
    ifconfig
    IP1 IP2
    네트워크 디바이스에 지정된 IP 주소(IP1: 로컬, IP2: 원격)
    secret
    파일 경로
    생성된 공유 키 지정
    auth
    SHA1
    HMAC 알고리즘(기본값)
    cipher
    BF-CBC
    그룹 암호화 알고리즘(기본값)
    comp-lzo
    -
    LZO 압축 사용

    서버


    설정

  • 공유 키 구성
  • 미리 설정된 공공 키를 설정 디렉터리로 이동하고 소유자와 권한을 수정합니다.
    $ sudo mkdir /etc/openvpn/ddwrt
    $ sudo mv /tmp/static.key /etc/openvpn/ddwrt/static.key
    $ sudo chown root:root /etc/openvpn/ddwrt/static.key
    $ sudo chmod 600 /etc/openvpn/ddwrt/static.key
    
  • 구성 투입
  • 프로파일을 생성합니다.
    cat > /etc/openvpn/ddwrt.conf << EOL
    dev tun
    proto udp
    port 11194
    
    ifconfig 192.168.99.1 192.168.99.2
    secret /etc/openvpn/ddwrt/static.key
    comp-lzo
    
    # 権限
    user nobody
    group nobody
    persist-tun
    persist-key
    
    # ログ
    log-append /var/log/static_openvpn.log
    EOL
    

    부팅


    OpenVPN을 다시 시작합니다.
    $ sudo service restart openvpn
    openvpn を停止中:                                          [  OK  ]
    openvpn を起動中:                                          [  OK  ]
    $
    
    실행 OK 를 확인하고 로그에 오류가 없으면 완료 를 설정합니다.
    방화벽은 포트 11194(UDP)을 구성할 수 있습니다.

    클라이언트


    설정

  • DD-WRT 로그인
  • 브라우저를 통해 DD-WRT에 액세스합니다.
    DD-WRT의 IP 주소를 192.168.0.77로 설정합니다.
    http://192.168.0.77/
    펌웨어와 버전에 따라 디자인도 다르다.
    미국 BUFRFALO를 사용하여 DD-WRT를 사용자 정의하고 펌웨어를 공개합니다.)
  • 스크립트 투입
  • 루트 디렉터리에서 만든 데이터는 메모리에 있기 때문에 꺼지거나 다시 시작하면 사라집니다.
    필요한 파일이나 설정을 스크립트로 설정하여 시작하는 nvram에 저장합니다.
    [Administration] -> 하위 메뉴 [Commands]를 엽니다.
    [Command Shell]에 연결 스크립트를 붙여넣습니다.
    mkdir /tmp/openvpn
    
    cat > /tmp/openvpn/vps.conf << EOL
    dev tun
    proto udp
    remote 接続先(VPNサーバ)IP 11194
    ifconfig 192.168.99.2 192.168.99.1
    secret /tmp/openvpn/secret.key
    daemon
    nobind
    comp-lzo
    EOL
    
    cat > /tmp/openvpn/secret.key << EOL
    -----BEGIN OpenVPN Static key V1-----
                 (中略)
    -----END OpenVPN Static key V1-----
    EOL
    
    cat > /tmp/openvpn/startup << EOL
    #!/bin/sh
    PROCESS=\`ps w | grep openvpn | egrep -v 'grep|/bin/sh' | wc -l\`
    if [ \$PROCESS -eq 0 ]; then
      /usr/sbin/openvpn --config /tmp/openvpn/vps.conf &
    fi
    EOL
    
    chmod a+x /tmp/openvpn/startup
    
    echo "* * * * * root /tmp/openvpn/startup" > /tmp/cron.d/openvpn
    
    stopservice cron && startservice cron
    
    exit 0
    
    
    [save Startp]를 누르면 스크립트가 저장됩니다.
    대본의 동작은 이런 느낌이다.
  • OpenVPN 연결을 위한 디렉토리 만들기
  • 구성 파일 생성
  • 공용 키 만들기
  • 연결 스크립트 만들기(다중 연결 안 함)
  • 분당 연결 스크립트를 실행하는cron
  • 만들기
  • cron을 다시 불러오기 (만든cron이 실행되지 않음)
  • 부팅


    DD-WRT를 재부팅한 후 cron을 통해 OpenVPN을 실행합니다.

    확인


    VPN이 설정되면 서버 측에서 다음 로그를 출력합니다.
    Sun Dec  6 01:49:41 2015 Peer Connection Initiated with xxx.xxx.xxx.xxx:34579
    Sun Dec  6 01:49:41 2015 Initialization Sequence Completed
    
    소통을 확인하다.
  • 클라이언트 -> 서버
  • root@DD-WRT:~# ping 192.168.99.1
    PING 192.168.99.1 (192.168.99.1): 56 data bytes
    64 bytes from 192.168.99.1: seq=0 ttl=64 time=11.667 ms
    64 bytes from 192.168.99.1: seq=1 ttl=64 time=11.647 ms
    64 bytes from 192.168.99.1: seq=2 ttl=64 time=11.410 ms
    64 bytes from 192.168.99.1: seq=3 ttl=64 time=11.319 ms
    ^C
    --- 192.168.99.1 ping statistics ---
    4 packets transmitted, 4 packets received, 0% packet loss
    round-trip min/avg/max = 11.319/11.510/11.667 ms
    root@DD-WRT:~#
    
  • 서버 -> 클라이언트
  • [XXX@www openvpn]$ ping 192.168.99.2
    PING 192.168.99.2 (192.168.99.2) 56(84) bytes of data.
    64 bytes from 192.168.99.2: icmp_seq=1 ttl=64 time=12.0 ms
    64 bytes from 192.168.99.2: icmp_seq=2 ttl=64 time=11.3 ms
    64 bytes from 192.168.99.2: icmp_seq=3 ttl=64 time=10.9 ms
    64 bytes from 192.168.99.2: icmp_seq=4 ttl=64 time=11.4 ms
    ^C
    --- 192.168.99.2 ping statistics ---
    4 packets transmitted, 4 received, 0% packet loss, time 3290ms
    rtt min/avg/max/mdev = 10.903/11.441/12.081/0.433 ms
    [XXX@www openvpn]$
    
    VPN 구축 및 커뮤니케이션을 확인했습니다.
    VPN을 거치지 않고 바로 ping을 한 경우는 11ms 정도입니다.

    처리량


    ipperf로 측정했습니다.
    root@DD-WRT:~# iperf -c 192.168.99.1 -t 60 -i 2
    ------------------------------------------------------------
    Client connecting to 192.168.99.1, TCP port 5001
    TCP window size: 19.1 KByte (default)
    ------------------------------------------------------------
    [  3] local 192.168.99.2 port 39459 connected with 192.168.99.1 port 5001
    [ ID] Interval       Transfer     Bandwidth
    [  3]  0.0- 2.0 sec  4.09 MBytes  17.1 Mbits/sec
    [  3]  2.0- 4.0 sec  4.08 MBytes  17.1 Mbits/sec
    [  3]  4.0- 6.0 sec  4.14 MBytes  17.4 Mbits/sec
    [  3]  6.0- 8.0 sec  4.15 MBytes  17.4 Mbits/sec
    [  3]  8.0-10.0 sec  4.10 MBytes  17.2 Mbits/sec
    [  3] 10.0-12.0 sec  4.12 MBytes  17.3 Mbits/sec
    [  3] 12.0-14.0 sec  4.05 MBytes  17.0 Mbits/sec
    [  3] 14.0-16.0 sec  4.09 MBytes  17.2 Mbits/sec
    [  3] 16.0-18.0 sec  4.08 MBytes  17.1 Mbits/sec
    [  3] 18.0-20.0 sec  4.09 MBytes  17.2 Mbits/sec
    [  3] 20.0-22.0 sec  4.11 MBytes  17.2 Mbits/sec
    [  3] 22.0-24.0 sec  4.02 MBytes  16.8 Mbits/sec
    [  3] 24.0-26.0 sec  4.09 MBytes  17.1 Mbits/sec
    [  3] 26.0-28.0 sec  4.14 MBytes  17.4 Mbits/sec
    [  3] 28.0-30.0 sec  4.08 MBytes  17.1 Mbits/sec
    [  3] 30.0-32.0 sec  4.11 MBytes  17.2 Mbits/sec
    [  3] 32.0-34.0 sec  4.03 MBytes  16.9 Mbits/sec
    [  3] 34.0-36.0 sec  4.07 MBytes  17.1 Mbits/sec
    [  3] 36.0-38.0 sec  4.13 MBytes  17.3 Mbits/sec
    [  3] 38.0-40.0 sec  4.02 MBytes  16.8 Mbits/sec
    [  3] 40.0-42.0 sec  4.13 MBytes  17.3 Mbits/sec
    [  3] 42.0-44.0 sec  4.07 MBytes  17.1 Mbits/sec
    [  3] 44.0-46.0 sec  4.09 MBytes  17.2 Mbits/sec
    [  3] 46.0-48.0 sec  4.13 MBytes  17.3 Mbits/sec
    [  3] 48.0-50.0 sec  4.08 MBytes  17.1 Mbits/sec
    [  3] 50.0-52.0 sec  4.09 MBytes  17.2 Mbits/sec
    [  3] 52.0-54.0 sec  4.00 MBytes  16.8 Mbits/sec
    [  3] 54.0-56.0 sec  3.84 MBytes  16.1 Mbits/sec
    [  3] 56.0-58.0 sec  4.13 MBytes  17.3 Mbits/sec
    [  3] 58.0-60.0 sec  4.06 MBytes  17.0 Mbits/sec
    [  3]  0.0-60.0 sec   122 MBytes  17.1 Mbits/sec
    root@DD-WRT:~#
    
    top(DD-WRT)
    root@DD-WRT:~# top
    Mem: 20448K used, 40988K free, 0K shrd, 2952K buff, 7924K cached
    CPU: 46.7% usr 32.4% sys  0.0% nic  8.1% idle  0.0% io  0.0% irq 12.7% sirq
    Load average: 1.42 0.59 0.22 3/48 1795
      PID  PPID USER     STAT   VSZ %VSZ CPU %CPU COMMAND
     1788     1 root     R     3012  4.8   0 84.9 /usr/sbin/openvpn --config /tmp/o
     1793  1755 root     S     6128  9.9   0  5.9 iperf -c 192.168.99.1 -t 60 -i 2
      892     1 root     S     2332  3.7   0  0.2 hostapd -B -P /var/run/ath0_hosta
     1792  1791 root     R     1336  2.1   0  0.2 top
     1531     1 root     S     2460  3.9   0  0.0 startservice_f run_rc_startup
     1749     1 root     S     2164  3.5   0  0.0 httpd -p 80
      547     1 root     S     1720  2.7   0  0.0 watchdog
     1520     1 root     S     1708  2.7   0  0.0 wland
     1754     1 root     S     1680  2.7   0  0.0 resetbutton
     1127     1 root     S     1468  2.3   0  0.0 process_monitor
     1791  1756 root     S     1336  2.1   0  0.0 -sh
     1755  1354 root     S     1336  2.1   0  0.0 -sh
      964     1 root     S     1324  2.1   0  0.0 telnetd
        1     0 root     S     1304  2.1   0  0.0 /sbin/init
     1354  1005 root     S     1260  2.0   0  0.0 dropbear -b /tmp/loginprompt -r /
     1756  1005 root     S     1260  2.0   0  0.0 dropbear -b /tmp/loginprompt -r /
     1005     1 root     S     1196  1.9   0  0.0 dropbear -b /tmp/loginprompt -r /
      989     1 root     S      884  1.4   0  0.0 dnsmasq --conf-file=/tmp/dnsmasq.
      543     1 root     S      844  1.3   0  0.0 /sbin/mstpd
      529     1 root     S      796  1.2   0  0.0 /sbin/hotplug2 --set-rules-file /
    
    
    측정 60초, 평균 17.1Mbit/sec.
    로드 DD-WRT의 CPU가 병목현상인 것처럼 느껴집니다.
    직접 연결 측정 시 23.8Mbit/sec입니다.

    총결산


    원활한 소통 확인이 이루어졌다.
    OpenVPN은 소프트웨어 VPN이기 때문에 CPU 부하에 따라 처리량이 편차가 있을 수 있습니다.
    이번에 지정되지 않은 매개 변수 등을 완전히 끓이면 좋은 가치가 있을 것이다.

    참조 페이지


    Static Key Mini-HOWTO
    OpenVPN 2.0.x


    비록 안전하지는 않지만, 나는 인증과 비밀번호를 무효로 설정하여 삼키는 양을 측정해 보았다.
    auth none
    cipher none
    
    iperf(DD-WRT)
    root@DD-WRT:~# iperf -c 192.168.99.1 -t 60 -i 2
    ------------------------------------------------------------
    Client connecting to 192.168.99.1, TCP port 5001
    TCP window size: 19.5 KByte (default)
    ------------------------------------------------------------
    [  3] local 192.168.99.2 port 44942 connected with 192.168.99.1 port 5001
    [ ID] Interval       Transfer     Bandwidth
    [  3]  0.0- 2.0 sec  4.00 MBytes  16.8 Mbits/sec
    [  3]  2.0- 4.0 sec  4.26 MBytes  17.9 Mbits/sec
    [  3]  4.0- 6.0 sec  4.26 MBytes  17.9 Mbits/sec
    [  3]  6.0- 8.0 sec  4.30 MBytes  18.1 Mbits/sec
    [  3]  8.0-10.0 sec  4.34 MBytes  18.2 Mbits/sec
    [  3] 10.0-12.0 sec  4.18 MBytes  17.5 Mbits/sec
    [  3] 12.0-14.0 sec  4.25 MBytes  17.8 Mbits/sec
    [  3] 14.0-16.0 sec  4.18 MBytes  17.5 Mbits/sec
    [  3] 16.0-18.0 sec  4.27 MBytes  17.9 Mbits/sec
    [  3] 18.0-20.0 sec  4.35 MBytes  18.3 Mbits/sec
    [  3] 20.0-22.0 sec  4.35 MBytes  18.3 Mbits/sec
    [  3] 22.0-24.0 sec  4.25 MBytes  17.8 Mbits/sec
    [  3] 24.0-26.0 sec  4.18 MBytes  17.5 Mbits/sec
    [  3] 26.0-28.0 sec  4.31 MBytes  18.1 Mbits/sec
    [  3] 28.0-30.0 sec  4.27 MBytes  17.9 Mbits/sec
    [  3] 30.0-32.0 sec  4.31 MBytes  18.1 Mbits/sec
    [  3] 32.0-34.0 sec  4.26 MBytes  17.9 Mbits/sec
    [  3] 34.0-36.0 sec  4.26 MBytes  17.9 Mbits/sec
    [  3] 36.0-38.0 sec  4.38 MBytes  18.4 Mbits/sec
    [  3] 38.0-40.0 sec  4.27 MBytes  17.9 Mbits/sec
    [  3] 40.0-42.0 sec  4.23 MBytes  17.7 Mbits/sec
    [  3] 42.0-44.0 sec  4.25 MBytes  17.8 Mbits/sec
    [  3] 44.0-46.0 sec  4.21 MBytes  17.7 Mbits/sec
    [  3] 46.0-48.0 sec  4.36 MBytes  18.3 Mbits/sec
    [  3] 48.0-50.0 sec  4.27 MBytes  17.9 Mbits/sec
    [  3] 50.0-52.0 sec  4.34 MBytes  18.2 Mbits/sec
    [  3] 52.0-54.0 sec  4.28 MBytes  18.0 Mbits/sec
    [  3] 54.0-56.0 sec  4.30 MBytes  18.0 Mbits/sec
    [  3] 56.0-58.0 sec  4.27 MBytes  17.9 Mbits/sec
    [  3] 58.0-60.0 sec  4.30 MBytes  18.1 Mbits/sec
    [  3]  0.0-60.0 sec   128 MBytes  17.9 Mbits/sec
    root@DD-WRT:~#
    
    top(DD-WRT)
    Mem: 22032K used, 39404K free, 0K shrd, 3284K buff, 9200K cached
    CPU: 14.0% usr 22.0% sys  0.0% nic 51.9% idle  0.0% io  0.0% irq 11.9% sirq
    Load average: 0.64 0.25 0.16 3/47 2302
      PID  PPID USER     STAT   VSZ %VSZ CPU %CPU COMMAND
     1816     1 root     R     3004  4.8   0 35.0 /usr/sbin/openvpn --config /tmp/o
     2266  2220 root     S     6128  9.9   0  8.9 iperf -c 192.168.99.1 -t 60 -i 2
     1744     1 root     S     2660  4.3   0  0.5 httpd -p 80
     2255  2252 root     R     1336  2.1   0  0.2 top
      888     1 root     S     2332  3.7   0  0.0 hostapd -B -P /var/run/ath0_hosta
      544     1 root     S     1720  2.7   0  0.0 watchdog
     1506     1 root     S     1708  2.7   0  0.0 wland
     1749     1 root     S     1680  2.7   0  0.0 resetbutton
     1141     1 root     S     1468  2.3   0  0.0 process_monitor
     2220  2217 root     S     1336  2.1   0  0.0 -sh
     2252  2251 root     S     1336  2.1   0  0.0 -sh
      963     1 root     S     1324  2.1   0  0.0 telnetd
        1     0 root     S     1304  2.1   0  0.0 /sbin/init
     2251  1029 root     S     1260  2.0   0  0.0 dropbear -b /tmp/loginprompt -r /
     2217  1029 root     S     1260  2.0   0  0.0 dropbear -b /tmp/loginprompt -r /
     1029     1 root     S     1196  1.9   0  0.0 dropbear -b /tmp/loginprompt -r /
     1002     1 root     S      884  1.4   0  0.0 dnsmasq --conf-file=/tmp/dnsmasq.
      540     1 root     S      844  1.3   0  0.0 /sbin/mstpd
      513     1 root     S      796  1.2   0  0.0 /sbin/hotplug2 --set-rules-file /
     1566     1 root     S      792  1.2   0  0.0 cron
    
    해시 값 처리가 되지 않아 CPU 부하가 줄고 속도도 증가했다.

    좋은 웹페이지 즐겨찾기