Oracle Cloud: 온프레미스에서 VPN을 통해 Object Storage에 액세스해 보았습니다.

■목적



Object Storage는 Private IP가 없기 때문에 인터넷으로 액세스하게 되지만 HTTPS로 액세스하므로 암호화되어 안전합니다.
이번에는 굳이 Private IP에서 액세스할 수 있도록 Squid의 Proxy Server 경유로 Object Strage에 액세스시켜 보겠습니다.

■ 네트워크 구성





■ 네트워크 구성 만들기



・상기의 구성을 Terraform등 사용해 조금 작성합니다
 이 절차는 Proxy Server 설치에서 설명합니다.

■ Proxy Server 구축



● Proxy Server용 Linux 인스턴스 생성



Private Subnet에 Compute Instance 만들기

●NAT Gateway 작성



NAT 게이트웨이 설정
yum 설치하려면 Internet 액세스가 필요합니다.
이번에는 Private Subnet에 Server를 구축하기 때문에 Public IP가 없습니다.
따라서 NAT Gatway를 통해 squid를 설치합니다.

● squid 설치


# yum install squid
[root@squid-proxy opc]# yum install -y squid
    ・・・
            インストール:
              squid.x86_64 7:3.5.20-12.el7

            依存性関連をインストールしました:
              libecap.x86_64 0:1.0.0-1.el7
              libtool-ltdl.x86_64 0:2.4.2-22.el7_3
              perl-Compress-Raw-Bzip2.x86_64 0:2.061-3.el7
              perl-Compress-Raw-Zlib.x86_64 1:2.061-4.el7
              perl-DBI.x86_64 0:1.627-4.el7
              perl-Data-Dumper.x86_64 0:2.145-3.el7
              perl-Digest.noarch 0:1.17-245.el7
              perl-Digest-MD5.x86_64 0:2.52-3.el7
              perl-IO-Compress.noarch 0:2.061-2.el7
              perl-Net-Daemon.noarch 0:0.48-5.el7
              perl-PlRPC.noarch 0:0.2020-14.el7
              squid-migration-script.x86_64 7:3.5.20-12.el7

            完了しました!

설치가 완료된 후 인터넷 액세스가 필요하지 않은 경우 NAT 게이트웨이를 [Block Traffic] 또는 삭제합니다.

●squid 설정



① Proxy 서버에 액세스 가능한 CIDR 등록 및 whitelist 동작 설정
vi에서 다음 정보 추가
[root@squid-proxy ~]# cp /etc/squid/squid.conf /etc/squid/squid.conf.org
[root@squid-proxy ~]# vi /etc/squid/squid.conf
    # should be allowed
    acl localnet src 10.0.0.0/16
    acl localnet src 172.24.0.0/16

    # Squid normally listens to port 3128
    http_port 3128

    # Wite List
    acl whitelist dstdomain "/etc/squid/whitelist"
    http_access allow whitelist

② 화이트리스트 설정
필요한 Region의 Object StorageURL 등록
[root@squid-proxy ~]# vi /etc/squid/whitelist
objectstorage.us-ashburn-1.oraclecloud.com

③Squid 기동
[root@squid-proxy ~]# service squid restart
[root@squid-proxy ~]# systemctl status squid.service
    ● squid.service - Squid caching proxy
       Loaded: loaded (/usr/lib/systemd/system/squid.service; disabled; vendor preset: disabled)
       Active: active (running) since 日 2019-01-20 23:04:19 GMT; 16h ago
      Process: 12721 ExecStop=/usr/sbin/squid -k shutdown -f $SQUID_CONF (code=exited, status=0/SUCCESS)
      Process: 12729 ExecStart=/usr/sbin/squid $SQUID_OPTS -f $SQUID_CONF (code=exited, status=0/SUCCESS)
      Process: 12724 ExecStartPre=/usr/libexec/squid/cache_swap.sh (code=exited, status=0/SUCCESS)
     Main PID: 12732 (squid)
       CGroup: /system.slice/squid.service
               ├─12732 /usr/sbin/squid -f /etc/squid/squid.conf
               ├─12734 (squid-1) -f /etc/squid/squid.conf
               └─12735 (logfile-daemon) /var/log/squid/access.log

     1月 20 23:04:19 squid-proxy systemd[1]: Starting Squid caching proxy...
     1月 20 23:04:19 squid-proxy systemd[1]: Started Squid caching proxy.
     1月 20 23:04:19 squid-proxy squid[12732]: Squid Parent: will start 1 kids
     1月 20 23:04:19 squid-proxy squid[12732]: Squid Parent: (squid-1) process 12734 started

④firewalld 설정
Squid 사용 Port 3128을 통과하도록 설정
[root@squid-proxy ~]# firewall-cmd --permanent --add-port=3128/tcp
    success
[root@squid-proxy ~]# systemctl restart firewalld

■Private Load Balancer 구축



Proxy Server의 로드 균형 조정 및 중복을 위해 Load Balancer 배포

●Private Load Balancer 작성



Load Balancer 화면에서 [Create Load Balancer] 버튼을 클릭하고 다음 정보를 입력하여 생성
・Listener Information
    - Protocol:TCP
    - PORT:3128

・Backend Set Information
    - IP Address: Squid Proxy ServerのPrivate IP Addressを登録
    - Port:3128

・Health Check 
    - Protocol:TCP
    - PORT:3128



●Backend Sets Health 확인
Backend Set가 등록되어 프록시 서버와 통신할 수 있는지 확인


■ 동작 확인



온프레미스 인스턴스에서 직접 object 스토리지에 액세스할 수 있는지 확인합니다.
여기에서는 OCI Command Line Interface (CLI)를 사용하여 액세스합니다.

● proxy 설정 전 확인 : 에러 나오는 것 확인



Private Subnet에서 직접 연결할 수 없는지 확인
[root@test-Inst01 ~]$ oci os bucket list --query 'data[*]."name"|[0]'
    Usage: oci os bucket list [OPTIONS]

    Error: Unable to retrieve namespace internally. Please provide the namespace using the option "--['namespace-name']".

● 프록시 환경 변수 설정



프록시를 통한 설정
이번에는 Load Barancer를 사용하고 있기 때문에 Load Barancer의 Listener IP (10.0.0.8)를 설정합니다.
[root@test-Inst01 ~]$ export https_proxy="10.0.0.8:3128"
[root@test-Inst01 ~]$ env | grep proxy
    https_proxy=10.0.0.8:3128

● bucket 액세스 확인



프록시를 통해 액세스할 수 있는지 확인
[root@test-Inst01 ~]$ oci os bucket list --query 'data[*]."name"|[0]'
    "Proxy-Bucket"

● 프록시 서버 (Squid)를 통해 액세스되었는지 확인



Squid LOG 확인하고 Load Balancer IP에서 objectstorage에 액세스하는지 확인
[root@squid-proxy squid]# tail -f /var/log/squid/access.log


    1548078960.163    282 10.0.0.7 TCP_TUNNEL/200 4107 CONNECT objectstorage.us-ashburn-1.oraclecloud.com:443 - HIER_DIRECT/134.70.100.100 -
    1548078960.553    273 10.0.0.7 TCP_TUNNEL/200 4540 CONNECT objectstorage.us-ashburn-1.oraclecloud.com:443 - HIER_DIRECT/134.70.100.100 -

● 테스트 파일 전송


[root@test-Inst01 ~]$ oci os object put  -bn Proxy-Bucket --file /tmp/test-file01.txt --name test-file01.txt --no-multipart
    {
      "etag": "A1A66A5F1E975E053024",
      "last-modified": "Mon, 21 Jan 2019 15:32:47 GMT",
      "opc-content-md5": "2M2Y8AsgTpgAmY=="
    }

● 테스트 파일 확인


[root@test-Inst01 ~]$ oci os object list -bn Proxy-Bucket --output table
    +---------------------+-----------------+------+----------------------------------+
    | md5                 | name            | size | time-created                     |
    +---------------------+-----------------+------+----------------------------------+
    | 2M2Y8AsgTpgAmY7Ph== | test-file01.txt | 0    | 2019-01-21T15:32:47.298000+00:00 |
    +---------------------+-----------------+------+----------------------------------+
    prefixes: []

■부록



●Load Balancer의 IP 확인



OCI의 Load Balancer(LB)는 투명하게 Active/Standby로 구성되어 있으며 IP는 자동 번호가 매겨집니다.
LB로부터, Backend Servers가 되는 Squid에의 Poring 하고 있기 때문에
 그 자동 번호 매겨진 Active/Standby 각각의 IP는, Squid 서버로 tcpdump를 취하는 것으로 확인할 수 있습니다
[root@squid-proxy opc]# tcpdump -n -i ens3 port 3128
    tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
    listening on ens3, link-type EN10MB (Ethernet), capture size 262144 bytes
    01:19:23.588100 IP 10.0.0.6.50286 > 10.0.10.11.squid: Flags [S], seq 915959842, win 26880, options [mss 8960,sackOK,TS val 2815064024 ecr 0,nop,wscale 7], length 0
    01:19:23.588149 IP 10.0.10.11.squid > 10.0.0.6.50286: Flags [S.], seq 495790511, ack 915959843, win 26844, options [mss 8960,sackOK,TS val 322500794 ecr 2815064024,nop,wscale 7], length 0
    01:19:23.588250 IP 10.0.0.6.50286 > 10.0.10.11.squid: Flags [.], ack 1, win 210, options [nop,nop,TS val 2815064024 ecr 322500794], length 0
    01:19:23.588719 IP 10.0.0.6.50286 > 10.0.10.11.squid: Flags [F.], seq 1, ack 1, win 210, options [nop,nop,TS val 2815064024 ecr 322500794], length 0
    01:19:23.588777 IP 10.0.10.11.squid > 10.0.0.6.50286: Flags [F.], seq 1, ack 2, win 210, options [nop,nop,TS val 322500795 ecr 2815064024], length 0
    01:19:23.588874 IP 10.0.0.6.50286 > 10.0.10.11.squid: Flags [.], ack 2, win 210, options [nop,nop,TS val 2815064024 ecr 322500795], length 0
    01:19:25.019310 IP 10.0.0.7.50304 > 10.0.10.11.squid: Flags [S], seq 2132021857, win 26880, options [mss 8960,sackOK,TS val 2733706381 ecr 0,nop,wscale 7], length 0
    01:19:25.019349 IP 10.0.10.11.squid > 10.0.0.7.50304: Flags [S.], seq 117296909, ack 2132021858, win 26844, options [mss 8960,sackOK,TS val 1898647448 ecr 2733706381,nop,wscale 7], length 0
    01:19:25.019444 IP 10.0.0.7.50304 > 10.0.10.11.squid: Flags [.], ack 1, win 210, options [nop,nop,TS val 2733706382 ecr 1898647448], length 0
    01:19:25.020022 IP 10.0.0.7.50304 > 10.0.10.11.squid: Flags [F.], seq 1, ack 1, win 210, options [nop,nop,TS val 2733706382 ecr 1898647448], length 0
    01:19:25.020099 IP 10.0.10.11.squid > 10.0.0.7.50304: Flags [F.], seq 1, ack 2, win 210, options [nop,nop,TS val 1898647449 ecr 2733706382], length 0
    01:19:25.020189 IP 10.0.0.7.50304 > 10.0.10.11.squid: Flags [.], ack 2, win 210, options [nop,nop,TS val 2733706382 ecr 1898647449], length 0

위의 실행 결과에 따라 다음이 LB의 IP가됩니다.
VIP: 10.0.0.8 (OCI 콘솔에서 확인할 수 있는 IP)
Active: 10.0.0.7 (Client에서 Squid에 액세스한 LOG에서 확인한 IP)
Stanby: 10.0.0.6 (tcpdump에서 확인한 IP)

좋은 웹페이지 즐겨찾기