OpenVPN 브리지 모드를 활용하여 VPN에 분산 빌드 환경 구축

9791 단어 VPN분산 처리
우리는 SIE가 라이센스 사용자를 위해 제공하는 SN-DBS를 분산 빌드 시스템으로 사용하지만 SN-DBS는 비 IP 프로토콜로 실행되는 시스템이기 때문에 모든 개발자가 재택 근무 시스템입니다. 되는 현상에서는 분산 빌드가 기능하지 않고, 생산성을 크게 떨어뜨리는 상황이 되고 있다.
재택근무 체제가 언제까지 계속될지 모르는 상황에서 분산 빌드가 작동하지 않는 채로는 사업 계획에 심각한 영향을 미치기 때문에 VPN을 이용하여 분산 빌드 환경을 구축한다.

OpenVPN 서버 구축



SN-DBS의 분차 빌드를 동작시키기 위해서는, 컴퓨팅 자원이 동일 네트워크상(L2)으로 접속되고 있을 필요가 있다.
인터넷상에서 접속하는 시스템은 IP주소에 의한 라우팅이 필요하기 때문에 L3로 접속되어 동작하지 않는다.
OpenVPN 브리지 모드(TAP)는 OpenVPN 서버가 속한 네트워크에 가상적으로 L2로 연결할 수 있습니다.
OpenVPN 호환 AWS Client VPN은 TAP 모드로 만들 수 없으며 Client to Client 연결도 불가능하므로 ES2 인스턴스에 OpenVPN을 구축합니다.

네트워크 및 서버 구성



설명을 위해 구성을 작성합니다. 필요에 따라 변경하십시오.

VPC
10.10.0.0/16

subnet
10.10.21.0/24

route-table
10.10.0.0/16 => local
0.0.0.0/0 => igw

instance
10.10.21.5

인스턴스 시작 시 기본 IP 지정
서브넷의 기본 게이트웨이는 10.10.21.1, 해석기는 10.10.21.2입니다.

security-group
TCP 22  0.0.0.0/0
UCP 443 0.0.0.0/0

OpenVPN 서버 설정



설치 방법이나 인증 방법의 설정은 구그하면 나오므로 할애.

How To Guide: Set Up & Configure OpenVPN client/server VPN | OpenVPN
h tps://오페 vp. 네 t/쯤에 ty-그렇게 r세 s/호 w-와/

/etc/openvpn/server.conf
port 443
proto udp
dev tap0

ca ca.crt
cert server.crt
key server.key
dh dh2048.pem

server-bridge 10.10.21.5 255.255.255.0 10.10.21.100 10.10.21.255

client-to-client

keepalive 10 120
cipher AES-256-GCM

compress lz4-v2
push "compress lz4-v2"

user nobody
group nogroup

persist-key
persist-tun

status /var/log/openvpn/openvpn-status.log

log         /var/log/openvpn/openvpn.log
log-append  /var/log/openvpn/openvpn.log

verb 3

explicit-exit-notify 1

서버 주소 10.10.21.5서브넷 마스크 255.255.255.0클라이언트에 할당할 주소 10.10.21.100 ~ 10.10.21.255
server-bridge 10.10.21.5 255.255.255.0 10.10.21.100 10.10.21.255

네트워크 브리지 만들기



가상 네트워크 인터페이스tap0와 물리적 네트워크 인터페이스ens5를 브리지로 연결합니다.
또한 VPN 클라이언트로의 데이터 프레임(패킷)은 서버가 전송할 필요가 있기 때문에 OpenVPN 서버로 향하지 않는 프레임이 NIC에서 파기되지 않도록 무차별 모드를 설정한다.

이러한 설정은 도중에 인스턴스의 네트워크 접속이 끊어지기 때문에, 스크립트로 단번에 실시한다.
테스트 중에 ssh 연결이 끊어지면 콘솔에서 인스턴스를 다시 시작하는 것이 좋습니다.

이더넷 브리징 | OpenVPN
h tps://오페 vp. 네 t/쯤에 ty- 있을 것 rs s/에테

이번에는 Ubuntu Server 18.04에서 작성하고 있으므로 netplansystemd-networkd를 이용하여 브리지를 구축한다.
브리지 작성에는 bridge-utils를 이용한다.
ens5: 物理NIC
tap0: 仮想NIC
br0 : 作成するブリッジ

netplan 설정



물리적 NIC에 설정된 macaddress를 브리지 측으로 설정합니다.

/etc/netplan/50-cloud-init.yaml
# This file is generated from information provided by the datasource.  Changes
# to it will not persist across an instance reboot.  To disable cloud-init's
# network configuration capabilities, write a file
# /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg with the following:
# network: {config: disabled}
network:
    version: 2
    ethernets:
        ens5:
            dhcp4: false
    bridges:
        br0:
            interfaces: [ens5]
            dhcp4: true
            macaddress: 06:85:47:07:47:ac

networkd-dispatcher 설정



netplan 은 스크립트 기동을 서포트하지 않는 대신, networkd-dispatcher 를 이용한 스크립트 호출을 이용할 수 있다.

FAQ | Netplan
h tps : // 네 tp 응. 이오 / 후 q

/etc/networkd-dispatcher/routable.d/50-ifup-hooks
#!/bin/sh

openvpn --mktun --dev tap0
ifconfig tap0 0.0.0.0 promisc up
ifconfig ens5 0.0.0.0 promisc up
brctl addif br0 tap0

실행 권한도 붙인다.

네트워크 인터페이스 확인


$ brctl show
bridge name     bridge id               STP enabled     interfaces
br0             8000.0685470747ac       no              ens5
                                                        tap0
$ ifconfig
br0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.10.21.5  netmask 255.255.255.0  broadcast 10.10.21.255
        inet6 fe80::485:47ff:fe07:47ac  prefixlen 64  scopeid 0x20<link>
        ether 06:85:47:07:47:ac  txqueuelen 1000  (Ethernet)
        RX packets 341095  bytes 267201788 (267.2 MB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 308550  bytes 263056027 (263.0 MB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

ens5: flags=4419<UP,BROADCAST,RUNNING,PROMISC,MULTICAST>  mtu 1500
        inet6 fe80::485:47ff:fe07:47ac  prefixlen 64  scopeid 0x20<link>
        ether 06:85:47:07:47:ac  txqueuelen 1000  (Ethernet)
        RX packets 320874  bytes 268137556 (268.1 MB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 329184  bytes 266967804 (266.9 MB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 34370  bytes 2746382 (2.7 MB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 34370  bytes 2746382 (2.7 MB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

tap0: flags=4419<UP,BROADCAST,RUNNING,PROMISC,MULTICAST>  mtu 1500
        inet6 fe80::c857:6eff:fe4a:d347  prefixlen 64  scopeid 0x20<link>
        ether ca:57:6e:4a:d3:47  txqueuelen 100  (Ethernet)
        RX packets 20388  bytes 3858461 (3.8 MB)
        RX errors 0  dropped 7  overruns 0  frame 0
        TX packets 201  bytes 9586 (9.5 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

클라이언트 설정


client
dev tap0
proto udp
remote SERVER_ADDRESS 443
resolv-retry infinite
nobind
persist-key
persist-tun
remote-cert-tls server
cipher AES-256-GCM
verb 3
<ca>
-----BEGIN CERTIFICATE-----
MIIDSzC...
-----END CERTIFICATE-----
</ca>

cert /path/to/client.crt
key /path/to/client.key

라우팅 테이블 확인


10.10.21.0/24에 대한 경로 정보가 있는지 확인
% netstat -nr
Routing tables

Internet:
Destination        Gateway            Flags        Refs      Use   Netif Expire
default            10.22.100.1        UGSc           91        7     en0       
10.10.21/24        link#12            UC              4        0    tap0      !
10.10.21.5         link#12            UHLWI           0        0    tap0      !
10.10.21.101       f2:91:9a:c:1c:78   UHLWI           0        1     lo0       
10.10.21.255       ff:ff:ff:ff:ff:ff  UHLWbI          0        1    tap0      !
10.22.100/24       link#5             UCS             9        0     en0      !
10.22.100.1/32     link#5             UCS             1        0     en0      !
10.22.100.1        0:3a:9d:4e:4c:1b   UHLWIir        31       78     en0   1145
10.22.100.116/32   link#5             UCS             1        0     en0      !
10.22.100.116      34:36:3b:d3:16:a   UHLWI           0        6     lo0       
10.22.100.255      ff:ff:ff:ff:ff:ff  UHLWbI          0        6     en0      !
127                127.0.0.1          UCS             0        0     lo0       
127.0.0.1          127.0.0.1          UH             75   562099     lo0       
169.254            link#5             UCS             1        0     en0      !
224.0.0/4          link#5             UmCS            2        0     en0      !
224.0.0.251        1:0:5e:0:0:fb      UHmLWI          0        0     en0       
239.255.255.250    1:0:5e:7f:ff:fa    UHmLWI          0      693     en0       
255.255.255.255/32 link#5             UCS             1        0     en0      !
255.255.255.255    ff:ff:ff:ff:ff:ff  UHLWbI          0        6     en0      !

소통 확인


% ping google.com
PING 10.10.21.5 (10.10.21.5): 56 data bytes
64 bytes from 10.10.21.5: icmp_seq=0 ttl=54 time=14.021 ms
64 bytes from 10.10.21.5: icmp_seq=1 ttl=54 time=111.575 ms
64 bytes from 10.10.21.5: icmp_seq=2 ttl=54 time=27.658 ms

분산 빌드 사용







움직였다.

AWS 네트워크에서 실행 중이므로 EC2 인스턴스를 사용하여 에이전트를 늘릴 수 있습니다!

좋은 웹페이지 즐겨찾기