##
## Tunnel Interface에 할당할 IP address를 설정한다.
## 예를 들어, PPTP server는 ppp0 tunnel interface에 10.1.0.1 주소를 할당.
## PPTP client는 ppp0 tunnel interface에 10.1.0.100 주소를 할당.
##
$ cat /etc/pptpd.conf
... 중간 생략 ...
localip 10.1.0.1
remoteip 10.1.0.100-130
... 중간 생략 ...
##
## PPTP client에 접속 요청할 때, PPTP server가 아래의 network 구성 정보를 client에게 전달하도록 함.
## mtu 값은 실제 physical NIC의 mtu 값보다 대략 60~100 bytes 정도 작게 설정해야
## tunnel session을 통해서 IP 패킷이 전송될 때, IP 패킷의 꼬리 부분이 짤리는 현상이 없다.
## 예를 들어서, physical NIC의 MTU 값이 1500 이라고 가정해보면
## PPTP tunnel interface의 MTU는 1400 정도 되어야 IP packet이 버려지지 않고 전송된다.
## 만약 실수로 tunnel mtu를 1500으로 설정하면, 1500 byte 짜리 IP packet이 전송되려 할 것이고
## 이 때 IP packet의 뒷 부분 60~100 bytes 정도가 짤리는 현상이 발생할 것이다.
##
$ cat /etc/ppp/pptpd-options
... 중간 생략 ...
ms-dns 1.1.1.1
mtu 1400
mru 1400
default-asyncmap
... 중간 생략 ...
##
## 반드시 ip_forward를 enable 시켜야 한다.
## ip_forward 설정이 enable 되어야 한개의 Linux OS내부에서 Physical port 'ens3'와 ppp0 간에 패킷이 forward된다.
##
$ sudo sysctl -w net.ipv4.ip_forward=1
$ cat /etc/sysctl.conf
... 중간 생략 ...
net.ipv4.ip_forward=1
... 중간 생략 ...
$
PPTP 계정 설정
PPTP client가 PPTP server에 접속할 때 사용할 Account 정보를 설정한다.
$ cat /etc/ppp/chap-secrets
# client server secret IP addresses
mynewid pptpd my!pass@word *
gildong pptpd me!hahahoho@ *
PPTP 서비스 기동
$ systemctl start pptpd
$ systemctl enable pptpd
$ systemctl status pptpd
● pptpd.service - PoPToP Point to Point Tunneling Server
Loaded: loaded (/lib/systemd/system/pptpd.service; disabled; vendor preset: enabled)
Active: active (running) since Tue 2024-02-20 22:35:17 KST; 34min ago
... 중간 생략 ...
일반적으로 물리 네트워크 포트 1개에는 MAC address 1개, IP address 1개를 설정해서 사용한다.
(본업으로 Network 장비를 개발, 운영하는 사람이 아니라면 이런 단순한 구성이 익숙할 듯)
그런데 물리 네트워크 포트 1개에 '마치 여러 개의 네트워크 포트가 있는 것처럼' 동작하게 만들어야 할 때가 있다.
예를 들어,
- 물리 포트 eth0에 2개 이상의 MAC address를 설정
- 물리 포트 eth0에 2개 이상의 IP address를 설정
위 2가지를 모두 지원하는 가상 포트 타입이 'MACVLAN'이다.
[참고: Hypervisor, Virtual Machine Manager 에서 VM이 사용할 NIC 포트를 Bridge 타입으로 설정하면 위와 같은 형상이 된다)
아래 예시 명령과 같이 따라해보면 바로 이해가 될 듯.
(명령을 실행했던 OS: Ubuntu 22.04)
## 물리 NIC 포트 'eth0'에 IP address 설정
ip address add 10.1.4.55/24 dev eth0
## 물리 포트 'eth0'에 가상 포트 'macvlan1'을 만들기
ip link add macvlan1 link eth0 type macvlan mode bridge
## network namespace 'net1' 만들기
ip netns add net1
## network namespace 'net1'에 가상 포트 'macvlan1'을 추가
ip link set macvlan1 netns net1
## 가상 포트 'macvlan1'을 활성화(up)하기
ip netns exec net1 ip link set dev macvlan1 up
## 가상 포트에 IP address를 설정
ip netns exec net1 ip address add 10.1.4.51/24 dev macvlan1
## IP 통신이 잘 되는지 'ping test'하기
ip netns exec net1 /usr/bin/ping 10.1.4.56
## 테스트 종료, 가상 포트 'macvlan1' 지우기
ip netns exec net1 ip link del macvlan1
위 예시에서 'mode bridge'로 설정한 부분이 있는데, bridge 모드 외에도 아래와 같은 다양한 모드를 설정할 수 있다.