Ubuntu 18.04 Netplan을 사용한 Static IP 설정

Ubuntu는 한 3년전부터인가 CentOS보단 개인적으로 더 주력으로 많이 사용했던거 같다.

16.04 LTS 나올때부터 꾸준히 쓰긴 했었는데 어느샌가 벌써 18.04가 LTS 버전으로 나왔다.

16.04로 바꿔서 쓸때도 systemctl 때문에 한동안 매우 힘들었는데 18.04 올라가고 벌써부터 바뀐 것들이 너무 많다. 뭐 이리 배울게 많아 ㅠㅠ

어찌됐든 또 잊어버리기 전에 다음에 헤매지 않게 기억해본다.

Static IP 설정

첫번째 난관은 네트워크 인터페이스 설정이다.

17.10부터 네트워크 인터페이스 설정이 NetPlan이라는 새로운 네트워크 설정 시스템으로 변경된 것 같다.

확실히 기존의 인터페이스 설정(/etc/network/interfaces)보다는 더 간결하고 쉽게 YAML을 사용하여 관리가 가능하다.

 /etc/netplan/*.yaml 

해당 위치에 인터페이스 설정이 가능하고 NetworkManager와 networkd 두개의 렌더러를 사용할 수 있다.

NetworkManger 렌더러를 사용하는 경우에는 X Window 환경에서만 사용하고 나머지 경우는 networkd 렌더러를 사용하면 된다.

네트워크 인터페이스 확인

우선 ifconfig -a 를 통해 설정할 네트워크 인터페이스를 확인한다.

user@canary-test-server:~$ ifconfig -a
 enp0s3: flags=4163  mtu 1500
         inet 10.0.2.15  netmask 255.255.255.0  broadcast 10.0.2.255
         inet6 fe80::a00:27ff:fe57:92b1  prefixlen 64  scopeid 0x20

         ether 08:00:27:57:92:b1  txqueuelen 1000  (Ethernet)
         RX packets 375  bytes 314494 (314.4 KB)
         RX errors 0  dropped 0  overruns 0  frame 0
         TX packets 178  bytes 18901 (18.9 KB)
         TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
 enp0s8: flags=4098  mtu 1500
         ether 08:00:27:22:8f:0b  txqueuelen 1000  (Ethernet)
         RX packets 0  bytes 0 (0.0 B)
         RX errors 0  dropped 0  overruns 0  frame 0
         TX packets 0  bytes 0 (0.0 B)
         TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
 lo: flags=73  mtu 65536
         inet 127.0.0.1  netmask 255.0.0.0
         inet6 ::1  prefixlen 128  scopeid 0x10
         loop  txqueuelen 1000  (Local Loopback)
         RX packets 28  bytes 2208 (2.2 KB)
         RX errors 0  dropped 0  overruns 0  frame 0
         TX packets 28  bytes 2208 (2.2 KB)
         TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

enp0s8 인터페이스를 NetPlan을 통해 설정해보자.

netPlan을 통한 Static IP 설정

아마 디폴트로 세팅했다면 아래와 같이 기본 인터페이스 설정이 존재한다.

/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.
 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:
     ethernets:
         enp0s3:
             addresses: []
             dhcp4: true
             optional: true
     version: 2

dhcp로 설정된 enp0s3 인터페이스가 보일 것이다.

새로운 인터페이스인 enp0s8번을 설정해보자

 $ sudo vi /etc/netplan/01-netcfg.yaml 

나는 virtualbox 호스트네트워크를 사용한 인터페이스를 추가해서 ethernets 섹션의 ip를 192.168.56.100/24로 설정하고 기타 아래와 같이 gateway와 dns 정보를 입력한다.

This file describes the network interfaces available on your system
 For more information, see netplan(5).
 network:
  version: 2
  renderer: networkd
  ethernets:
    enp0s8:
      dhcp4: no
      dhcp6: no
      addresses: [192.168.56.100/24]
      gateway4: 192.168.56.1
      nameservers:
        addresses: [8.8.8.8,8.8.4.4]

다른 섹션은 볼 필요 없고 ethernets 섹션만 정확하게 설정하고 저장한다.

  • dhcp4 : IPv4 dhcp 설정
  • dhcp6 : IPv6 dhcp 설정
  • addresses : ,로 구분한 IP 멀티로 가능
  • gateway4 : IPv4 gateway 설정
  • nameservers : dns 설정 ,로 구분 멀티로 설정 가능 [생략 가능]

설정 재적용

새 설정을 적용하려면 아래의 명령어를 실행한다.

 $ sudo netplan apply 

다시 ifconfig -a 해서 네트워크 인터페이스 정보를 확인한다.

enp0s3: flags=4163  mtu 1500
         inet 10.0.2.15  netmask 255.255.255.0  broadcast 10.0.2.255
         inet6 fe80::a00:27ff:fe57:92b1  prefixlen 64  scopeid 0x20

         ether 08:00:27:57:92:b1  txqueuelen 1000  (Ethernet)
         RX packets 1566  bytes 400006 (400.0 KB)
         RX errors 0  dropped 0  overruns 0  frame 0
         TX packets 980  bytes 153691 (153.6 KB)
         TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
 enp0s8: flags=4163  mtu 1500
         inet 192.168.56.100  netmask 255.255.255.0  broadcast 192.168.56.255
         inet6 fe80::a00:27ff:fe22:8f0b  prefixlen 64  scopeid 0x20

         ether 08:00:27:22:8f:0b  txqueuelen 1000  (Ethernet)
         RX packets 0  bytes 0 (0.0 B)
         RX errors 0  dropped 0  overruns 0  frame 0
         TX packets 5  bytes 386 (386.0 B)
         TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
 lo: flags=73  mtu 65536
         inet 127.0.0.1  netmask 255.0.0.0
         inet6 ::1  prefixlen 128  scopeid 0x10
         loop  txqueuelen 1000  (Local Loopback)
         RX packets 40  bytes 3108 (3.1 KB)
         RX errors 0  dropped 0  overruns 0  frame 0
         TX packets 40  bytes 3108 (3.1 KB)
         TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

정상적으로 변경된 것을 확인 할 수 있다.

MacBook-Pro:~ user$ ssh [email protected]
The authenticity of host ‘192.168.56.100 (192.168.56.100)’ can’t be established.
ECDSA key fingerprint is SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added ‘192.168.56.100’ (ECDSA) to the list of known hosts.
[email protected]’s password:
Welcome to Ubuntu 18.04 LTS (GNU/Linux 4.15.0-22-generic x86_64)

  • Documentation: https://help.ubuntu.com
  • Management: https://landscape.canonical.com
  • Support: https://ubuntu.com/advantage

외부에서도 정상적으로 세팅된 IP로 접속 가능한 것을 볼 수 있다.

IIS Express 외부 IP로 접속하기 (디버깅)

1. 기본적으로 IIS Express는 localhost만 접속이 가능하다.
2. 외부 아이피 즉, 192.168.0.13혹은 127.0.0.1으로 접속시 아래와 같은 에러가 발생한다.

Http error 503, The service is unavailable.

3. 현재 실행하고자하는 프로젝트로 우선 이동한다. 그리고 폴더 옵션에서 숨김 폴더를 표시를 한 뒤, .vs 디렉토리을 찾아야한다. 그리고 config 폴더에 applicationhost.config 를 실행한다.

{내 프로젝트} -> .vs -> config -> applicationhost.config

참고로 2015 이하 버전에서는 .vs가 보이지 않았다.
IIS Express의 C:\Users{유저이름}\Documents\IISExpress\config 폴더 안에 있는 applicationhost.config 를 수정해야했다.

4. 밑으로 내려가다보면 라는 부분이 있는데, 자신이 실행하고자 하는 포트를 찾으면 보일것이다. 이것을 localhost를 삭제한 뒤, 저장한다.

bindingInformation=”:내포트:localhost” -> bindingInformation=”:내포트:” 으로 변경

<site name="WebSite1" id="1" serverAutoStart="true">
    <application path="/">
        <virtualDirectory path="/" physicalPath="D:\workspace\cshap\-\-" />
    </application>
    <bindings>
        <binding protocol="http" bindingInformation=":8080:localhost" />
    </bindings>
</site>

<site name="FC2014_Provider" id="2">
    <application path="/" applicationPool="Clr4IntegratedAppPool">
        <virtualDirectory path="/" physicalPath="D:\workspace\cshap\-\-" />
    </application>
    <bindings>
        <binding protocol="http" bindingInformation="*:내포트:localhost" />
    </bindings>
</site>Code language: HTML, XML (xml)

5. 서버를 실행할 PC 서버의 방화벽을 해제 하니,이제 외부 아이피로 접속시 접속이 잘 되는것을 확인했다.

ubuntu에서 외부 접속을 좀 더 안전하게 설정하기 (우분투 ssh 접속 보안 설정)

1. 소개
우분투 서버를 관리하고 사용하는데 외부접속을 좀더 제한하여 보안을 강화한다.
보안강화는 접속 제한 두가지를 두고 SSH키 자체에 암호를 거는 것. 이렇게 세가지를 통합합니다.

2. 사용자 생성
우선은 sudo 권한이 있는 계정으로 서버접을 합니다.

3. RSA키 생성

# ssh-keygen -t rsa 

위의 명령어를 이용해서 RSA 방식의 개인키와 공개키를 생성합니다. 명령어를 실행하면 아래와 같이 키를 저장할 디렉토리와 파일명을 입력하라고 합니다. 보통 디폴트로 되어 있는 위치로 생성하면 됩니다. 현재 계정 아래의 .ssh 디렉토리 아래에 생성이 됩니다.

Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):

다음은 암호를 입력하라고 나옵니다. 만약 퍼블릭 키를 이용해서 리모트로 암호 없이 바로 접속할려면 암호를 입력하지 않고 엔터를 치면 됩니다.

Enter passphrase (empty for no passphrase):
Enter same passphrase again:

마지막으로 아래와 같은 메시지가 출력되면서 파일이 생성됩니다.

The key fingerprint is:
e9:54:90:a3:5d:ba:7b:34:f2:30:76:f5:c7:4c:d3:25 root@aaa
The key's randomart image is:
+--[ RSA 2048]----+
|        ..       |
|        o..   E .|
|       o +.    .o|
|      . oo  .  .o|
|        S. . . +.|
|       o* +   . +|
|       ..O .   . |
|        . o      |
|         .       |
+-----------------+

아래와 같이 id_rsa 개인키 파일과 id_rsa.pub공개키 파일이 생성됩니다.

total 16
-rw-r--r-- 1 root root  399  4월  9 18:10 authorized_keys
-rw------- 1 root root 1679  4월 10 17:24 id_rsa
-rw-r--r-- 1 root root  399  4월 10 17:24 id_rsa.pub
-rw-r--r-- 1 root root  444  4월  9 21:06 known_hosts

공개키를 이용한 ssh 접속

위에서 생성한 SSH 키를 이용해서 다른 서버에 접속할 때는 접속할려는 서버 계정의 홈 디렉토리 아래의 .ssh/authorized_keys 파일을 생성한 후 위에서 생성한 공개키 스트링을 넣어두면 됩니다.

# cat ~/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADDQABAAABAQCgatkuBNq72JGIR59+D5Xh271RcLgH+C/eydKHOoqdX5hpZuLnh4/72LagQuqEd6SXi/Obv4iEgyhp+qfmP0ub9gddAHPwCn3ZLgEc6VQoNgtToO9gdXXHKfIH5R4QmJGqCZwWrhyBlIVM6SYmb3mT29EUkVq4F3YEuHW2lF5K258p6O9flG5ONf9CopQhWtatCflmOV/SUEBZbEdq7AFW9WHGdWo9g7XVVQ0MEuoRfJL9cKF30e5BmlFqu1eWSCrf6PIGpVsH2ikpKm8OihfIn62eLD1qJJLMeagGHoe+Zce3++iUHrzj0EdM/L7Y9EKI9cq089mOfNkv0sCMY1xt root@aaa

이 공개키 값을 카피 후 접속할려는 서버의 ~/.ssh/authorized_keys 파일에 카피 합니다.

# cat ~/.ssh/authorized_keys
ssh-rsa AAAAB3NzaC1yc2EAAAADDQABAAABAQCgatkuBNq72JGIR59+D5Xh271RcLgH+C/eydKHOoqdX5hpZuLnh4/72LagQuqEd6SXi/Obv4iEgyhp+qfmP0ub9gddAHPwCn3ZLgEc6VQoNgtToO9gdXXHKfIH5R4QmJGqCZwWrhyBlIVM6SYmb3mT29EUkVq4F3YEuHW2lF5K258p6O9flG5ONf9CopQhWtatCflmOV/SUEBZbEdq7AFW9WHGdWo9g7XVVQ0MEuoRfJL9cKF30e5BmlFqu1eWSCrf6PIGpVsH2ikpKm8OihfIn62eLD1qJJLMeagGHoe+Zce3++iUHrzj0EdM/L7Y9EKI9cq089mOfNkv0sCMY1xt root@aaa

이 후부터는 원격 서버에 접속시에 현재 서버의 개인키와 원격 서버의 공개키값이 조합되어 암호 없이 ssh 접속이 가능해 집니다.

# ssh -p 14101 sshtest.fun25.co.kr
Last login: Fri Apr 10 15:37:18 2015 from 211.239.124.233
[email protected]:~#

보안 상이 이유로 ssh 서버에 위의 키 방식만 가능하게 하고 암호를 통한 접속은 불가능하도록 할려면 아래와 같이 sshd 설정을 하면 됩니다.

# vi /etc/ssh/sshd_config

sshd 설정파일을 편집해서 아래 옵션을 추가하면 암호를 통한 접속은 불가능합니다.

PermitRootLogin without-password

ssh 서비스를 리로딩합니다.

# service ssh reload

Visual studio Extension 설치시 에러

Visual studio extension 설치시 위와같은 에러가 발생하였다. 다른 확장을 설치해도 마찬가지..

1/9/2020 5:03:59 PM - Microsoft VSIX Installer
1/9/2020 5:03:59 PM - -------------------------------------------
1/9/2020 5:03:59 PM - Initializing Install…
1/9/2020 5:03:59 PM - Extension Details…
1/9/2020 5:03:59 PM -     Identifier      : AStyle.6b52ccde-8ae4-4233-bccd-6b9b0ba06a56
1/9/2020 5:03:59 PM -     Name            : AStyle Extension 2020
1/9/2020 5:03:59 PM -     Author          : C
1/9/2020 5:03:59 PM -     Version         : 3.0.0.0
1/9/2020 5:03:59 PM -     Description     : An extension for Artistic Style.
1/9/2020 5:03:59 PM -     Locale          : en-US
1/9/2020 5:03:59 PM -     MoreInfoURL     : 
1/9/2020 5:03:59 PM -     InstalledByMSI  : False
1/9/2020 5:03:59 PM -     SupportedFrameworkVersionRange : [0.0,2147483647.2147483647]
1/9/2020 5:03:59 PM - 
1/9/2020 5:03:59 PM -     Supported Products : 
1/9/2020 5:03:59 PM -         Microsoft.VisualStudio.Community
1/9/2020 5:03:59 PM -             Version : [15.0,)
1/9/2020 5:03:59 PM -         Microsoft.VisualStudio.Pro
1/9/2020 5:03:59 PM -             Version : [15.0,)
1/9/2020 5:03:59 PM -         Microsoft.VisualStudio.Enterprise
1/9/2020 5:03:59 PM -             Version : [15.0,)
1/9/2020 5:03:59 PM -         Microsoft.VisualStudio.IntegratedShell
1/9/2020 5:03:59 PM -             Version : [15.0,)
1/9/2020 5:03:59 PM - 
1/9/2020 5:03:59 PM -     References      : 
1/9/2020 5:03:59 PM - 
1/9/2020 5:03:59 PM - Searching for applicable products…
1/9/2020 5:03:59 PM - Found installed product - Global Location
1/9/2020 5:03:59 PM - Found installed product - AtmelStudio
1/9/2020 5:03:59 PM - Found installed product - ssms
1/9/2020 5:03:59 PM - VSIXInstaller.NoApplicableSKUsException: This extension is not installable on any currently installed products.
    at VSIXInstaller.App.InitializeInstall(Boolean isRepairSupported)
    at VSIXInstaller.App.InitializeInstall()
    at System.Threading.Tasks.Task.InnerInvoke()
    at System.Threading.Tasks.Task.Execute()

더블클릭해서 설치하지말고 해당 확장으 마우스 오른쪽 버턴을 클릭해서 VSLauncher.exe로 열기를 선택해주면 정상적으로 설치할 수 있다.

단 몇 분만에 삭제 불가능한 폴더 및 파일을 지우는 방법

윈도우 컴퓨터를 쓰면서 아주 머리 아픈건 간혹 발견되는 삭제 불가능한 파일 또는 폴더들을 어떻게 지우냐는 겁니다. 툭하면 잘 지우다가도 도중에 액세스 권한이 없다 하면서 오류 내용과 함께 삭제 자체가 불가능한 애물단지로 거듭나기 때문이죠.

하지만 간과한 게 있다면, 윈도우 자체 내에서도 지원 하는 기능이 있다는 점 입니다.

해당 문제 파일 및 폴더가 이동만 가능 하다면, 이는 해결이 가능합니다.

1. 드라이브 폴더 내에서, 새로 만들기를 해서, 폴더 이름을 ‘windows.old’ 로 설정합니다.

*설명: 드라이브란, C 드라이브, D 드라이브 같은 일종의 대형 폴더를 의미합니다. 이 폴더 안에 바탕화면, 사진, 음악, 비디오, 그리고 윈도우 시스템 파일 등 모든 중요한 것들이 저장되어 있습니다.

만약 D 드라이브 또는 외장 하드가 있다면, 해당 드라이브에서 이 작업을 하는 것을 추천합니다.

(C 드라이브 에서 해도 상관은 없지만, 윈도우가 설치 되지 않은 다른 드라이브에서 하는 편이 사용자에 의한 해당 파일 또는 폴더를 다른 곳 에 이동 하는 실수를 방지 할 수 있는 가장 안전한 방법이라서 그렇습니다.)

2. 문제의 삭제 불가능한 폴더 또는 파일을 해당 ‘windows.old’ 폴더 안으로 이동(옮겨) 해 줍니다.

만약 이동 ‘권한 확인’이 뜬다면, 예 또는 확인을 눌러주면 됩니다.

3. (7시 방향의 윈도우 마크)시작 메뉴에서 ‘디스크 정리’ 를 검색. 디스크 정리 앱을 실행합니다.

주의: 지금 해당 드라이브의 ‘windows.old’ 폴더 안에 있는 내용물이 지우려고 하는 해당 파일 또는 폴더인지 다시한번 확인 해 보시기 바랍니다.

4. ‘시스템 파일 정리’ 를 눌러서 추가 스캔을 합니다.

5. ‘이전 Windows 설치 파일’ 이라 되어 있는 항목에 체크 해 주고, 아래의 ‘확인’ 을 눌러줍니다.

6. 기다립시다. 해당 과정이 끝나면, 이제 문제는 해결 되어 있을 겁니다.

이래도 안 되는 경우에는, https://twitter.com/MSHelpsKorea 마이크로소프트 트위터 공식 고객지원에 문의 해 보시기 바랍니다.