SoftEther VPN 서버 구축 (4) – TAP Device를 통한 Local Bridge 설정

(Last Updated On: August 9, 2018)

SoftEther VPN SecureNAT

SoftEther VPN에 있는 SecureNAT은 Virtual DHCP 서버와 Virtual NAT을 구현한 SoftEther의 소프트웨어이다. 커널을 건들지 않아서 정말 어떠한 권한이나 시스템 설정 없이 바로바로 VPN을 구현시켜주는 가상 인터페이스이다.

참고 : https://blog.lincoln.hk/blog/2013/05/17/softether-on-vps-using-local-bridge/

문제점

  • 느리다.
  • 서버에 ICMP PING이 중복으로 처리되서 DUP 문제가 생긴다.
  • 호스트서버와 연결을 할 수 없다.

서버에 존재하지 않은 가상의 인터페이스이므로 호스트서버와 연결을 할 수 없다.

서버 아이피가 168.126.63.1 이고, 192.168.1.0/24 에 클라이언트가 있다고 쳐보자.
SecureNAT을 이용하는 클라이언트는 가상 DHCP 서버에게서 게이트웨이로 192.168.30.1의 주소를 받고, 192.168.30.101 의 아이피를 받았다.
그러나 게이트웨이 주소인 192.168.30.1은 서버에 없는 가상의 인터페이스이다.
서버와 통신까지 하고 싶다면, 서버가 그 SecureNAT VPN Client를 실행시켜 VPN에 접속해 아이피를 부여받는 방법 뿐이다.

 

해답은 SecureNAT 대신 Local Bridge을 이용

방법은 SecureNAT 대신 Local Bridge을 사용하는 것이다.
Local Bridge는 TAP어댑터를 이용해 구성을 할 것이다. OpenVZ 컨테이너에서는 커널을 변경할 수 없다. 그러나 대부분 TUN/TAP 어댑터를 지원하기 떄문에 이 방법으로 이용할 수 있다.

 

Disable SecureNAT

SecureNAT과 로컬브릿지 모드가 함께 작동하면, 트래픽이 무한루프에 빠져 CPU가 100%에 달하게 된다. 그래서 비활성화 해야한다.

Disable SoftEther VPN SecureNAT허브 관리메뉴에

SecureNAT 클릭.

Disable SecureNAT 클릭.

SecureNAT 비활성화 완료.

 

Local Bridge 설정

SoftEther VPN Local Bridge

Local Bridge Setting 클릭

SoftEther VPN Local Bridge기존의 Virtual Hub를 선택후,
New Tap Device 에 탭 디바이스이름을 넣고 로컬 브릿지 생성을 한다.
탭 디바이스는 어댑터에 머릿말로 tap_ 이 붙기 때문에 tap 이라는 이름은 삼가하자 ㅎㅎ

tap 디바이스가 생성되었는지 SSH 에서 확인한다.

DHCP 서버 설치

SecureNAT은 Virtual DHCP 서버가 포함돼 있었는데, 로컬 브리지로 설정하면 DHCP 서버도 구현해줘야한다. dnsmasq 소프트웨어로 DHCP서버를 구축하겠다.

설정할 NAT 주소 정보
네트워크 아이디 10.255.255.0
서브넷마스크 255.255.255.0 (/24)
게이트웨이 10.255.255.254
DHCP 할당 범위 10.255.255.100 – 10.255.255.250

dnsmasq 설치

RHEL 6, 7

yum install dnsmasq

Debian 9
apt install dnsmasq

dnsmasq 설정

/etc/dnsmasq.conf 를 에디터로 열어서 보기좋게

맨위에 있는 이 주석 라인 밑에 DHCP 설정값을 입력해야지.

를 입력해준다.

port=0 은 dnsmasq 가 기본적으로 DNS서버를 구현하는데 필요없어서 비활성화하였다.
필요한 경우 dns-server 옵션을 제거 후 기본 포트인 53으로 설정해서 쓰면 된다.

dnsmasq 재시작

systemctl restart dnsmasq

 

daemon 스크립트 변경

생성한 TAP 인터페이스에 아이피를 할당해야한다.
SoftEther VPN 서버가 실행될 때마다 자동으로 할당해주기 위해
/etc/init.d/vpnserver  를 에디터로 수정한다. (RHEL 7 기준)

데비안/우분투의 경우 스크립트가 조금 다르다. 주의.
어 그런데, 데비안/우분투 계열 최신 배포판에는 ifconfig 이 없는걸로 아는데??

수정한 데몬적용 및 서버 재시작

TAP 인터페이스에 아이피주소가 할당되었는지 확인.

 

VPN 서버 연결 테스트

10.255.255. 로 정상적으로 아이피를 부여받았다.

게이트웨이 아이피에 핑도 잘 된다.

IP 포워드

바로 위 상태까지 진행했다면, 당연히 인터넷이 되질 않는다. 내부 네트워크 (tap_sevpn)에서 인터넷(eth) IP를 이용해 나갈 수 있도록 포워딩을 해야한다.

/etc/sysctl.d/1-ipv4_forward.conf 를 생성 혹은 수정한다.

아래명령을 통해 sysctl 를 적용한다.

iptables POSTROUTING rule 추가

위는 IP 주소를 지정해야한다. 일반적인 서버에 그럴 일 없지만 IP주소가 동적아이피인경우

으로 사용한다.

iptables 저장

iptables 룰은 iptables 서비스가 재시작되거나 시스템이 재부팅되면, 룰이 날라가버린다.
이를 방지하기 위해 iptables를 유지시켜주는 프로그램을 설치한다. (RHEL 7 기준)

 

기타 참고사항

iptables 를 첫 실행시 iptables의 기본 방화벽이 설정되어 DHCP 서버가 차단되는 불상사가?? 있었다. 이 경우 iptables 룰을 제거 후, 다시 설정한 뒤 save를 하자.

iptables 룰 제거 명령 (참고: https://serverfault.com/questions/200635/best-way-to-clear-all-iptables-rules)

50 Replies to “SoftEther VPN 서버 구축 (4) – TAP Device를 통한 Local Bridge 설정”

  1. Poohsiro

    안녕하세요. 저는 라이트세일로 softether vpn 서버를 구축해서 사용중 인데요.. 로컬 브릿지 설정에서 번번히 막힙니다. 라이트 세일에서 로컬 브릿지 설정이 도저히 안됩니다. 어떤 문제가 있을까요? ㅠㅠ

  2. Hybrid Gear

    안녕하세요 영알못인 관계로 이곳에 질문 남깁니다

    1. 마지막 부분인 포워딩부분 직전에 아이피를 공급받는부분에서 문제가 생겼습니다
    현재 설정은 이렇습니다

    dnsmasq.conf

    interface=tap_sevpn
    dhcp-range=tap_sevpn,
    dhcp-option=tap_sevpn,option:netmask,
    dhcp-option=tap_sevpn,option:router,
    dhcp-option=tap_sevpn,option:dns-server,1.1.1.1,1.0.0.1
    port=0

    데몬스크립트 구문 중 아이피구간

    TAP_ADDR=
    TAP_MASK=

    서버 클라이언트겸 공인ip 주소
    VPN 게이트웨이 IP
    VPN 서브넷마스크
    VPN DHCP 아이피 범위 :

    결과값

    https://uploads.disquscdn.com/images/645bcb5c90109a65179b11bccb51aadc2d2eb7d9b59ec854e5346d23dfb1de4c.png

    무엇이 문제인지, 어떻게 해결해야할지 모르겠습니다 도와주세요
    ps.데몬 리스타트나 vpn서버 리스타트시 오류뿜는것은 없습니다

  3. Vincent Poudat

    올려주신 글 보고 잘 따라왔습니다.

    로컬 브릿지 설정하고 윗분처럼 IP 할당이 안 되는 부분은 말씀해주신대로 67, 68 포트를 열어주는 것으로 해결해서 정상적으로 아이피를 받아오는데,

    인터넷 연결이 없다고 나옵니다.

    마지막에 적어주신 ip포워드 부분도 잘 따라했는데 왜 그럴까요ㅠ
    데비안 쓰고 있습니다ㅠ

    바쁘시겠지만 함 봐주세용..

    • Kerus Ashe

      ip를받아왓는데 인터넷연결이안되는건
      iptables 라우팅문제입니다.
      사용하시는서버의 아이피환경(정적아이피.정적아이피.)에따라 설정값이 다를수있습니다.

      • Vincent Poudat

        해결했습니다! 여기 인기 블로그니까 다른 분들도 참고하시라고 결과 보고합니다ㅎㅎ

        tap에 ip 할당된거 까지 확인하고 dnsmasq 리스타트 해줬는데도 죽어도 안 되길래 마구 열받아하다가…

        걍 vpnserver 리스타트 해줬더니 됐어요;;;;

        좀 허무하죠ㅋㅋㅋ

        감사합니다!!

  4. KeonWoo PARK

    안녕하세요 올려주신글 매우 잘 읽고있습니다.

    위에서 말씀하신거처럼 동일하게 설정하고 tap 아이피가 10.*.*.1로 잡히는거까지 확인을 했습니다.

    근데 VPN 연결을 시도할경우 IP를 받아오지 못하고있는데요 (dnsmasq, vpnserver 둘다 정상)
    왜그럴까요? ㅠ

    • KeonWoo PARK

      Vultr에서 방화벽 없이, Ubuntu 19.04 버전으로 진행중입니다.
      secure NAT은 비활성화 되어있는 상태입니다.

          • KeonWoo PARK

            isc-dhcp-server로 했다가
            다운로드 속도가 엄청 낮아지는 버그가 있어서
            dnsmasq로 바꿨는데 이건 아이피가 할당이 안되네요 ㅠㅠ
            isc-dhcp-server 는 현재 설치가 안되어있는 상태입니다.

          • KeonWoo PARK

            ufw 방화벽 해제로 문제를 해결했습니다.
            근데 이번에는 접속이 문제네요 ㅠㅠ
            서버에서 L2TP over IPsec 만 키면 윈도우10, 안드로이드 둘다 접속이 안되고
            Raw L2TP with No Encryptions를 같이 키면 윈도우10은 접속이 되는데 안드로이드는 안되네요 ㅠㅠ

          • Kerus Ashe

            방화벽…이었군요

            L2TP over IPsec을 켜면 SE클라이언트에서 접속이 안되시는건가요?
            아니면, L2TP/IPsec VPN 클라이언트에서 안되는건가요?

            그리고 윈도우와 안드로이드는 같은 네트워크인가요?

          • KeonWoo PARK

            VPN 클라이언트에서 접속이 안되고있습니다
            윈도우는 KT 기가 유선을, 안드로이드는 KT LTE+ 무선 데이터를 사용중입니다.

          • KeonWoo PARK

            실패한 접속에 대해서는 로그가 안남더라고요..
            접속에 실패할때 연결시간이 10초이상 되는거같습니다.

          • KeonWoo PARK

            iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -o ens3 -j MASQUERADE
            이미 적용되어있는데..흠.. 뭐가문제일까요..;-;

          • KeonWoo PARK

            넵 적용했습니다.
            Raw L2TP with No Encryptions를 했을때 윈도우 10 인터넷이 정상적으로 작동했었습니다.

          • Kerus Ashe

            OpenVPN을 통해서 연결할 때
            사설 IP도 정상적으로 받아오던가요?

            한번 vultr/ubuntu 19.04/dnsmasq 로 문제가 있는지 확인해보겠습니다.

          • KeonWoo PARK

            넵 사설 아이피는 정상적으로 받아오나 인터넷이 안되는 문제가 발생하더라고요 ㅠㅠ

            지금 위에 적어주신 설정대로 Vultr / Debian 9 x64 로 한번 진행해보겠습니다.

          • Kerus Ashe

            혹시 PC는 공인아이피 환경입니까?
            공유기 환경입니까?

            공유기환경이라면, L2TP (IPsec) PASSTHROUGH를 허용해줘야 할 수도 있습니다.
            모바일도 똑같이 안된다면 이 문제는 아닌걸로 보입니다만..

            윈도우즈에서 SE클라이어트로 연결먼저 테스트해봐야할 것 같네요.

          • KeonWoo PARK

            PC는 공인 IP 환경에서 사용중에 있습니다.

            SE 클라이언트를 이용해 접속을 할경우에는 정상적으로 접속이 되는것을 확인했습니다.

          • KeonWoo PARK

            PC는 공인 IP 환경에서 사용중에 있습니다.

            SE 클라이언트를 이용해 접속을 할경우에는 정상적으로 접속이 되는것을 확인했습니다.

          • KeonWoo PARK

            혹시 가능하다면 이메일 주소를 알려주실수 있으신가요?

            설정 파일 내용과 서버 정보를 보내드리고자 합니다.

          • KeonWoo PARK

            이미 L2TP/IPsec with PSK로 설정되어있는 상태입니다 ㅠㅠ
            메일로 서버 정보를 보내드렸으니 참고 부탁드립니다.

          • Kerus Ashe

            vultr jp / ubuntu “19.10” / softether vpn sever 4.32 / dnsmasq / ufw 해제
            로 구축해서,

            윈도우즈 SE 클라이언트 및
            built-in L2TP,
            안드로이드에서 L2TP/IPsec PSK 및 안드로이드 OpenVPN 클라이언트 정상작동 확인했습니다.

            제가 KT LTE사용중이라 LTE에서도 접속해보았는데 정상으로 확인되었습니다.

            특이점은 systemd-resolved 이 서비스를 중지해야되는데요, 님 상황으로 보아 이 문제는 없는것으로 보이네요.

          • Kerus Ashe

            제가 테스트로 구축 후 입력한 리눅스 명령어입니다.

            SoftEther VPN Server
            DEFAULT허브 상태
            DEFAULT허브에 로컬브리지 tap_vpn 으로 생성.

            IPSec/L2TP 설정에
            Enable L2TP Server Function (L2TP over IPsec)
            기본 가상허브 이름 매칭 “DEFAULT”
            IPsec 사전공유키 “vpn”

            /etc/dnsmasq.conf

            interface=tap_vpn
            dhcp-range=tap_vpn,10.0.0.2,10.0.0.254,12h
            dhcp-option=tap_vpn,option:netmask,255.255.255.0
            dhcp-option=tap_vpn,option:router,10.0.0.1
            dhcp-option=tap_vpn,option:dns-server,1.1.1.1,1.0.0.1
            port=0
            log-facility=/var/log/dnsmasq.log


            ifconfig tap_vpn 10.0.0.1 netmask 255.255.255.0
            sudo sh -c "echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf"
            sudo sysctl -p
            iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -o ens3 -j MASQUERADE

            또한 L2TP 연결 시 패킷을 아래 명령으로 디버깅해보실 수 있습니다.

            tcpdump -nni ens3 src 접속아이피 and tcp port not 22

          • Kerus Ashe

            일단 L2TP의경우 TCP,UDP가 아닌 다른 프로토콜을 추가로 사용합니다.

            라이트세일의 경우 기본적으로 AWS 방화벽이 존재하기 때문에,
            L2TP 협상 트래픽이 걸러지리라봅니다.

            라이트세일은 TCP와 UDP 의 사용자 정의 방화벽만 존재해서
            그 외의 패킷을 허용하고 싶으면, 방화벽기능을 사용하지 않으면 가능합니다.

            방화벽 기능을 사용하지 않으려면
            All 이라는 포트 룰을 추가합니다.

          • KeonWoo PARK

            전 라이트세일의 아닌 Vultr라는 VPS 해외 호스팅사에서 사용하고있습니다..
            방화벽은 아에 없이 그냥 바로 WAN으로 연결되어있고요 ㅠㅠ

          • Kerus Ashe

            😳…

            L2TP로 접속테스트는 제가 주로 쓰질않아서 설정이 어떤지 잘 모르겠네요.
            확실한건 제가 구축했을 때는, 모바일도 잘 되었습니다.

          • KeonWoo PARK

            cat /etc/dnsmasq.conf 내용입니다.

            interface=tap_vpn
            dhcp-range=tap_vpn,10.0.0.2,10.0.0.254,12h
            dhcp-option=tap_vpn,option:netmask,255.255.255.0
            dhcp-option=tap_vpn,option:router,10.0.0.1
            dhcp-option=tap_vpn,option:dns-server,1.1.1.1,1.0.0.1
            port=0
            log-facility=/var/log/dnsmasq.log

      • KeonWoo PARK

        2020-02-28 16:07:58.319 L2TP PPP Session [*.*.*.*:1701]: Acquiring an IP address from the DHCP server failed. To accept a PPP session, you need to have a DHCP server. Make sure that a DHCP server is working normally in the Ethernet segment which the Virtual Hub belongs to. If you do not have a DHCP server, you can use the Virtual DHCP function of the SecureNAT on the Virtual Hub instead.
        2020-02-28 16:08:06.183 L2TP PPP Session [*.*.*.*:1701]: The VPN Client sent a packet though an IP address of the VPN Client hasn’t been determined.

Leave a Reply

Your email address will not be published. Required fields are marked *