반응형

 


 

NAT에 대한 개념 설명은 아래의 Joinc 사이트를 참고

 

 

NAT

DNAT를 이용한 Load balancing

www.joinc.co.kr:443

 

 

일반적으로 DNAT는;

 웹 서버가 Private Network 내부에 존재하면, Public network과 Private network의 경계에 있는 DNAT 장치가 외부의 모든 요청 패킷을 수신하여 Dest Address를 Private network의 IP Address 및 TCP/UCP Port로 변경하여 전달하는 용도로 자주 이용된다. 

  

아래 명령 예제는  

  • Host machine이 eth1
  • Host machine과 Virtual machine의 Bridge interface를 virbr0    (참고: VM 내부의 IP는 192.168.122.203) 

라고 가정하고 설정한 것이다. 

$ echo 1 > /proc/sys/net/ipv4/ip_forward 

##
## 주의: 
##   아래 -F 옵션은 FORWARD 체인의 내용을 깨끗하게 지우는 명령(Flush)이기 때문에 조심해서 사용해야 한다.
##
$ iptables -F FORWARD 

##
## FORWARD 체인에 eth1 ethernet port로 나가는 트래픽을 허용하는 Rule을 추가.
##
$ iptables -A FORWARD -o eth1 -j ACCEPT 

##
## FORWARD 체인에 virbr0 ethernet port로 나가는 트래픽을 허용하는 Rule을 추가.
##
$ iptables -A FORWARD -o virbr0 -j ACCEPT 

##
## VM의 SSH 서비스로 DNAT 처리 (Port forward: 50022 --> 22)
##
$ iptables  -t nat  -A PREROUTING  -i eth1 -p TCP  --dport 50022  -j DNAT  --to 192.168.122.203:22

##
## VM의 Web 서비스로 DNAT 처리 (Port forward: 50080 --> 80)
##
$ iptables  -t nat  -A PREROUTING  -i eth1 -p TCP  --dport 50080  -j DNAT  --to 192.168.122.203:80

 

위 명령 예시에서 마지막 명령줄에 대한 설명:

Gateway의 eth1으로 들어오는 패킷중에 80번 포트번호로 접속하는 패킷은 192.198.122.203(HTTP)의 80번 포트로 보낸다.

파라미터 단위로 의미를 파악해보면, 아래와 같다.

  iptables -t nat(NAT기능을 사용하겠다) 
              -A PREROUTING(PREROUTING 체인에 Rule을 추가)
              -i eth0(eth0 인터페이스로 들어오는 패킷들에 적용한다) 
              -p TCP(TCP 프로토콜이면) 
              --dport 80(접속하려는 포트번호가 80번이면) 
              -j DNAT --to 192.168.122.203:80 
             (목적지 주소를 192.168.122.203으로 변경, 포트 번호는 80번으로 변경한다)

 

 


 

반응형

 


 


참고: 
  테스트한 날: 2023년 1월 6일
  테스트에 사용했던 OS:  Ubuntu 22.04

 

 

Ubuntu OS를 Booting할 때마다 기존  /etc/resolv.conf 파일은  resolvconf.servicesystemd-resolved.service에 의해서 overwrite 된다.

따라서 nameserver를 내가 원하는 값으로 변경하고 싶으면, 아래와 같이 추가로 설정 작업을 해야 한다.

 

##
## root 계정 권한 갖기
##

$  sudo -s


##
## Ubuntu를 설치할 때 최소 설치 또는 기본 설정으로 설치했다면
## 아래와 같이 resolvconf.service가 없어서 에러가 출력될 것이다.
## 따라서 resolvconf.service 부터 설치해야 한다.
##

$  systemctl status resolvconf.service

Unit resolvconf.service could not be found.

$

## 
## NOTE:
##   apt 명령으로 resolvconf를 설치하기 전에 임시로 /etc/resolv.conf 파일에
##   nameserver 항목에 1.1.1.1 값을 설정한다.
##
$  cat  /etc/resolv.conf
... 중간 생략 ...

nameserver  1.1.1.1         ## <-- 이 부분을 수정할 것!!!
options edns0 trust-ad

$  apt install resolvconf

$  systemctl status resolvconf

● resolvconf.service - Nameserver information manager
     Loaded: loaded (/lib/systemd/system/resolvconf.service; enabled; vendor preset: enabled)
     Active: active (exited) since Thu 2021-12-30 16:07:28 KST; 3min 14s ago

... 중간 생략 ...

$  cat  /etc/resolvconf/resolv.conf.d/head

nameserver 1.1.1.1
nameserver 8.8.8.8


##
## 위에서 설정한 값을 system에 반영하기 위해 아래와 같이 명령을 수행한다.
##

$  resolvconf --enable-updates

$  resolvconf -u

$  cat /etc/resolv.conf

nameserver 1.1.1.1
nameserver 8.8.8.8

$

##
## 위 과정이 에러 없이 수행되었다면, OS를 Reboot해서
## /etc/resolv.conf 설정 내용을 원하는 대로 반영되는지 확인해볼 것 !!!
##

$  reboot

## Rebooting ...
## ...
## ...

$  cat /etc/resolv.conf

nameserver 1.1.1.1
nameserver 8.8.8.8

$

 

 


참고:  위 설정은  Ubuntu 18.04 와 Ubuntu 20.04 에서만 테스트했음.  다른 버전의 Ubuntu는 위 설명이 효과가 있는지 아직 모름.
(2021년 12월 30일에 테스트한 결과)

 

 

 

참고:  위와 같이 nameserver를 왜 변경해야 하는 상황이 있을까?

 

apt update 또는 apt install  명령을 수행하다보면, 아래 화면과 같이  Temporary failure resolving archive.ubuntu.com 이라는 에러가 발생하는 경우가 있다.

atp 명령 수행시 Temporary failure resolving archive.ubuntu.com 에러 발생

 

왜 이런 에러가 발생할까?

nameserver 기본 설정이 아래와 같이 127.0.0.53 으로 되어 있기 때문이다.

nameserver 값을 1.1.1.1 또는 8.8.8.8 과 같이 설정하면 apt install 명령을 잘 수행될 것이다.

 

resolv.conf 기본 설정 정보


 


 

반응형

 

작성일: 2024년 3월 11일

 

CentOS, RHEL, Ubuntu 등 Linux Desktop에 원격 접속할 때, 일반적으로 VNC를 사용하곤 하는데
Ubuntu 22.04 버전을 사용할 때는 VNC보다는 MS-RD가 좀더 화면도 예쁘고,
화면 반응도 빨라서 MS-RD을 더 많이 사용하게 된다.
그리고 설정 방법도 간단해서 더 손이 자주 간다.

 

 

Ubuntu 22.04 Server 에서 Screen Sharing 설정하기

[ Settings ] -> [ Sharing ] -> [ Screening Sharing ] 순서로 설정 메뉴를 찾아간다.

 

주의: MS-RD만 사용할 것이기 때문에 VNC는 활성화하지 않도록 한다.

 

 

MacOS Client 에서 Screen Sharing 설정하기

Microsoft Remote Desktop(MS-RD)를 사용하기 위해서는 아래와 같이 Apple App Store에서 

"Microsoft Remote Desktop"을 검색하여, 설치한다.

 

 

위 앱을 설치 후, Ubuntu 22.04 서버의 IP Address와 MS-RD에 접근할 ID, Password만 입력하면 설정 끝 !!!

그런 후에 "Connect" 메뉴를 선택하면 접속이 잘 된다.

 

 

Ubuntu Client 에서 Screen Sharing 설정하기

Ubuntu Client에는 Remmina 앱이 있어야 Ubuntu Server에 MS-RD로 접근할 수 있다.

내가 설치한 기억이 없는걸보면, OS 설치할 때 Remmina는 이미 설치되어 있던 것 같다.

위 화면과 같이 Remmina를 실행하고, 아래 화면에서 접속 정보(IP Address, ID, Password)를 입력하고 Connect하면 Ubuntu Server의 Desktop에 잘 접근된다.

 

 

 

 

 

작업 끝

 

 

 

 






 

 

이하, 작성된 글은 Ubuntu 20.04 이하에서 테스트한 것을 정리한 것이다.
따라서 지금 시점에서는 아래의 내용이 잘 맞지 않을 수 있다.


 

Ubuntu 18.04와 20.04 버전에서 Remote Dekstop(원격 데스크탑) 기능을 사용하려면 Vino를 설치해야 한다.

(참고: 아주 오래된 Ubuntu, CentOS 버전은 다른 VNC 서버 패키지를 설치해도 문제가 없지만, Ubuntu 18.04와 20.04는 꼭 Vino를 사용하는 것이 좋다)

 

 

설정 따라하기

 

##
## VNC Server 기능을 하는 Vino를 설치하기
##

$  sudo  apt install vino -y
...

 

아래 화면처럼 설정 GUI(Settings)를 실행한다.

 

Ubuntu 설정 화면 실행하기

 

아래와 화면이 보일 것이다.

그리고 아래 그림의 풍선 도움말 순서를 따라서 실행한다.

 

Ubuntu Screen Sharing 설정 화면

 

 


참고로, RealVNC viewer나 Safari VNC Client App이 Vino VNC server의 Encryption 방식을 지원하지 못하기 때문에 아래 명령을 통해서 Vino의 encryption 기능을 비활성화해야 한다.
(본인이 사용하는 VNC Client의 Encryption 방식을 잘 모른다면, 일단 아래 명령을 따라서 수행해보는 것이 좋다. 물론 보안이 허술해지는 문제는 있지만  ㅠㅠ)

 

##
## Vino VNC server의 Encryption 기능 끄기(Deactivate)
##

$ /usr/bin/gsettings set org.gnome.Vino require-encryption false

 

 

 

위 그림에서 (3)번 순서에 해당하는 Screen Sharing 메뉴를 Click하면, 아래와 같은 설정 화면이 뜰 것이다.

 

Ubuntu Screen Sharing 설정 화면

 

 

위와 같이 Vino Server를 설정했다면, PC(Macbook)에서 Safari 같은 Web browser의 주소 입력창에 Ubuntu 서버의 주소를 입력한다.

 

Safari Web Browser를 이용한 VNC Client App 실행하기

 

Safara Web Browser에서 아래와 같은 VNC Client App 화면을 새로 만들고, VNC Server에 접속해 줄 것이다.

아래와 같이 Ubuntu 접속된 화면이 나오면 Remote Desktop(원격 데스크탑) 연결 성공  :D

 

원격 데스크탑(Remote Desktop) 접속한 화면

 

 

 

주의할 점 & 이슈 

 

Ubuntu 18.04와 20.04 버전에서 Dekstop을 원격에서 사용할 수 있게 하려면, 주의할 점이 있다.

이 주의할 점만 제외하면, 일반적인 Sharing Desktop 설정 절차에 따라 설정하면 문제없이 동작한다.

 

  • 이슈 1:
    Ubuntu 에는 Vino Server가 기본적으로 5900 TCP port로 원격제어 서비스를 제공한다.
    따라서 TigerVNC Server 같은 다른 프로그램을 추가로 설치하면 오동작하기 때문에 Ubuntu가 기본 제공하는 Vino Server를 이용하여 원격제어 서비스를 사용해야 한다.
    (즉, TigerVNC 서버 같은 별도의 서버를 Ubuntu Server에 설치하면, 오히려 포트 번호 충돌 때문에 설정이 더 꼬이게 된다. 그냥 순정 Vino 서버를 사용하는 것을 추천함.)
  • 이슈 2: OVS와 Vino를 같이 사용하는 경우에 발생하는 이슈
    ->  “Screen Sharing” 창의 Networks 항목에 “Wired connection 1”이 없어서, [ON] 버튼을 누를 수 없다.
    • 보통 이 문제는 NetworkManager에 의해서 자동으로 관리되는 NIC Port가 없기 때문에 발생한다.
      예를 들어, Open vSwitch에 eth0 port를 할당하기 위해 강제로 eth0 port를 NetworkManager의 관리 대상에서 뺐기 때문에 발생한다.
    • Open vSwitch를 사용하는 경우가 아니라면, 이 문제가 발생할 일이 거의 없겠지만 만약 꼭 Open vSwitch를 사용하면서 Sharing Desktop 기능도 사용하고 싶다면 아래와 같이 NIC Port를 강제로 하나 더 만든다.
      1. eth0: OVS의 Physical Port로 할당 (IP address: 0.0.0.0)
      2. eth1: 원래 사용하지 않는 Port이지만, NetworkManger GUI에서 강제로 [Enable]하고 IP address와 Gateway를 설정해준다.
      3. 이런 후에 [Screen Sharing] 설정 GUI를 다시 열어보면, “Networks” 항목에 “Wired connection 1”을 생기고 [ON] 버튼을 누를 수 있게 된다.

 

 

반응형

Ubuntu OS를 처음 설치하고 부팅하고, 아래와 같은 작업을 실행하여 App 설치하고 초기 설정 작업을 한다.

## root 계정 암호 설정하기

$ sudo passwd root
$ apt update -y
$ apt install -y vim  htop  iftop git  curl  openssh-server  tree  lrzsz  terminator

 

/etc/ssh/sshd_config 파일에서 Root Login Permit 설정하기

## ... 파일을 열고 직접 수정하고, 아래 명령을 수행 ...
$ systemctl restart sshd

 

.vimrc 파일 수정

$ cat << EOF >> ~/.vimrc
color koehler
set tags=./tags,./my/proj/tags
set tabstop=4 softtabstop=4 shiftwidth=4  
set expandtab  
set autoindent
EOF

 

Network 설정

$ cat << EOF >> /etc/network/interface

auto ens3 
iface ens3 inet static 
address 10.10.12.30
netmask 255.255.255.0 
gateway 10.10.12.1 
dns-nameservers 8.8.8.8 8.8.4.4 

auto ens4 
iface ens4 inet static 
address 192.168.1.201 
netmask 255.255.255.0 
network 192.168.1.0 
broadcast 192.168.1.255 
gateway 192.168.1.1 
dns-nameservers 8.8.8.8 8.8.4.4 

EOF

 

 

반응형

 


 

 

테스트한 날짜: 2024년 3월 13일
테스트에 사용한 OS: Ubuntu 22.02
                        (Ubuntu 버전마다 설치할 pkg가 다르다. Ubuntu 20.04와 22.04만 이 블로그의 설명이 유효하다.)

 

 

Open vSwitch 설치

 

Open vSwitch를 설치한다.

$ sudo -s

$ apt update -y 

$ apt install -y openvswitch-common openvswitch-switch

$ apt install qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils virt-manager

 

libvirt-daemon과 virt-manager간 연동이 되려면, OS를 한번 Reboot 해줘야 한다.

 

 

Open vSwitch 설정

 

KVM Hypervisor의 VM이 사용할 Virtual Switch를 구축한다.

 

$ sudo -s

##
## br-ex 라는 이름의 Virtual Switch를 만든다.
##

$ ovs-vsctl add-br br-ex

$ ovs-vsctl show


##
## 인터넷과 연결된 Port를 eth0라고 가정한다.
## 이 eth0 port를 br-ex switch에 추가한다.
## [ 주의 ]
##   eth0 port를 bridge에 추가하는 순간, 기존에 eth0로 networking하던 것들이 모두 단절되니까
##   eth0 외에 eth1과 같이 여분의 network port를 추가로 만들어 놓는 것이 좋다.
##

$ ovs-vsctl add-port br-ex eth0

$ ovs-vsctl show


##
## netplan 설정 파일을 작성한다. (아래 예제를 참고)
##

$ cat /etc/netplan/00-installer-config.yaml

network:
  version: 2
  ethernets:
    eth0:                ## ovs bridge에 추가한 eth0 포트에는 IP 주소를 할당하지 않는다.
      dhcp4: false
    br-ex:               ## ovs bridge의 br-ex 포트에 eth0에 있는 주소를 설정한다.
      addresses:
      - 10.1.4.64/24
      gateway4: 10.1.4.1
      routes:
        - to: 10.1.4.0/24
          via: 10.1.4.1   
        - to: default
          via: 10.1.4.1
      nameservers:
        addresses:
        - 1.1.1.1
        - 8.8.8.8
    eth1:
      addresses:
      - 10.1.3.171/24
      routes:
        - to: 10.1.3.0/24
          via: 10.1.3.1      
      nameservers:
        addresses:
        - 1.1.1.1
        - 8.8.8.8
    eth2:
      dhcp4: false
    eth3:
      dhcp4: false
      
$ netplan apply

$ ifconfig br-ex

... 생략 ...

 

위와 같이 수행한 후, Ubuntu OS를 Reboot해서 Network Port eth0, br-ex가 정상적으로 구성되는지 확인한다.

(꼭, Reboot해야 하는 것은 아닌데 설정이 적용되는지 확인하는 차원에서 Reboot해보는 것을 권장한다)

 

 

 

KVM의 Network Profile 작성

 

KVM이 위에서 만든 br-ex virtual switch를 사용할 수 있도록 network profile을 작성한다.

$  cat > br-ex.xml <<-EOF

<network> 
 <name>br-ex</name>        # KVM이 User에게 출력해주는 이름 
 <forward mode='bridge'/> 
 <bridge name='br-ex'/>    # OVS가 가지고 있는 실제 bridge name 
 <virtualport type='openvswitch'/> 
</network> 
EOF

$

 

 

 

KVM에 Network Bridge 정보 등록

 

KVM 명령어인 virsh을 이용하여 br-ex switch 정보를 등록한다.

$ virsh  net-define  br-ex.xml
$ virsh  net-start  br-ex
$ virsh  net-autostart  br-ex
$ virsh  net-list​

 

 

위 설정 작성 후, Ubuntu Desktop 화면에서 'Virtual Manager' App을 실행하면 'br-ex' switch를 사용할 수 있다.

 

 

 

 

블로그 작성자: sejong.jeonjo@gmail.com

 

+ Recent posts