Strongswan ашиглан IPSec VPN үүсгэх

Temuujin Yavuuzandan
4 min readSep 16, 2021

--

Strongswan нь сервер болон хэрэглэгчдийг нууцлал(encryption), танилтын(authentication) боломжоор хангадаг IPSec-г хэрэгжүүлдэг пэйкеж (package) бөгөөд энэ туршилтаар түүнийг ашиглан өөр газруудад байгаа (Remote) серверүүдийн хоорондын харилцааг нууцалж тэдний алсын харилцааг(communications with remote networks) дотоод сүлжээнд байгаа мэтээр зохицуулахад ашиглана. Ингэхдээ алсаас харилцаж буй хоёр сүлжээ нь урьдчилан нууцлалын түлхүүр (PreShared Key — PSK) солилцох замаар ажиллана.

Түлхүүр үг: Pre-Shared Key, IPSec, Kernel Packet Forwarding, UFW Firewall

Туршилтын орчин

  • Виртуал машин
  • Oracle VM VirtualBOX
  • Үйлдлийн систем
  • Ubuntu

Хэрэгжүүлэлт

Туршилтыг виртуал машин дээр гүйцэтгэж байгаа тул рүүтерийг(router) интернэт гэж үзнэ харин түүнээс виртуал машин (virtual machine) авч байгаа хаягийг гадаад хаяг(external IP) харин виртуал машин дотроо зохицуулж байгаа хаягийг дотоод хаяг(Internal IP) гэж авч үзнэ. Туршилтыг гүйцэтгэхдээ 2 виртуал машин ашиглах бөгөөд тэдгээрийг “Ubuntu-1” болон “Ubuntu-2” гэж нэрлэе. Виртуал машинууд нь тус бүр 2 ширхэг сүлжээний карттай байх бөгөөд дараах тохиргоог хийсэн байх хэрэгтэй. Сүлжээний картын тохиргоо “Bridged Adapter” байна.

Ubuntu-1

OS: Ubuntu

External IP: 192.168.88.170

Internal IP: 192.168.0.101/24

Location: Ulaanbaatar, Mongolia (гэж авч үзэе)

Ubuntu-2

OS: Ubuntu

External IP: 192.168.88.169

Internal IP: 10.0.2.15/24

Location: Darkhan, Mongolia (гэж авч үзэе)

Алхам 1: Кернелд пэйкет (packet) форвард (forwarding) тохиргоо хийх

  1. Хоёр виртуал машины кернелд нь пэйкет форвард хийх боломжийг дараах файлд /etc/sysctl.conf доорх тохиргоог хийж идэвхжүүлж өгнө.

/etc/sysctl.conf файлаас дараах мөрүүдийг хайж олоод коммент байхыг болиулж утгыг дараах байдлаар тохируулна.

net.ipv4.ip_forward = 1 
net.ipv6.conf.all.forwarding = 1
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.all.send_redirects = 0

2. Шинэ тохиргоог дараах командыг ажилуулж системд оруулна.

sudo sysctl -p

3. UFW firewall сервис асаалттай бол дараах дүрмүүдийг виртуал машинуудын /etc/ufw/before.rules тохиргооны файл дотор филтер дүрмүүдийн(filter rules) дээр нэмж өгнө.

Ubuntu-1 дээр

*nat
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -s 10.0.2.0/24 -d 192.168.0.0/24 -j MASQUERADE
COMMIT

Ubuntu-2 дээр

*nat
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -s 192.168.0.0/24 -d 10.0.2.0/24 -j MASQUERADE
COMMIT
  1. Firewall дүрмүүдийг амжилттай нэмсэн бол машин тус бүр дээр UFW-г дараах командаар шинэ тохиргоотой дахин эхлүүлнэ.
sudo ufw disable 
sudo ufw enable

Алхам 2: strongSwan суулгах

Виртуал машин тус бүр дээр пэйкежийг(package) шинэчилж, strongSwan пйэкежийг дараах командаар суулгана.

sudo apt update
sudo apt install strongswan

Алхам 3: Виртуал машинуудыг тохируулах

Виртуал машинуудыг тохируулахдаа /etc/ipsec.conf тохиргооны файлыг ашиглана.

Ubuntu-1 дээрх тохиргоо

Доорх командаар жинхэнэ тохиргооны файлыг нөөц болгон хадгалж, тохиргооны файлыг текст засагч дээр нээнэ.

sudo cp /etc/ipsec.conf /etc/ipsec.conf.orig
sudo nano /etc/ipsec.conf

Одоо /etc/ipsec.conf дотор дараах тохиргоог хуулж өгөх хэрэгтэй

config setup
charondebug=”all”
uniqueids=yes
conn Ubuntu1-to-Ubuntu2
type=tunnel
authby=secret
keyexchange=ikev2
left=192.168.88.170
leftsubnet=192.168.0.101/24
right=192.168.88.169
rightsubnet=10.0.2.15/24
ike=aes256-sha1-modp1024!
esp=aes256-sha1!
aggressive=no
keyingtries=%forever
ikelifetime=28800s
lifetime=3600s
dpddelay=30s
dpdtimeout=120s
dpdaction=restart
auto=start

Ubuntu-2 дээрх тохиргоо

Доорх командаар жинхэнэ тохиргооны файлыг нөөц болгон хадгалж, тохиргооны файлыг текст засагч дээр нээнэ.

sudo cp /etc/ipsec.conf /etc/ipsec.conf.orig
sudo nano /etc/ipsec.conf

Одоо /etc/ipsec.conf дотор дараах тохиргоог хийж өгөх хэрэгтэй

config setup
charondebug="all"
uniqueids=yes
conn Ubuntu2-to-Ubuntu1
type=tunnel
authby=secret
keyexchange=ikev2
left=192.168.88.169
leftsubnet=10.0.2.15/24
right=192.168.88.170
rightsubnet=192.168.0.101/24
ike=aes256-sha1-modp1024!
esp=aes256-sha1!
aggressive=no
keyingtries=%forever
lifetime=3600s
ikelifetime=28800s
dpddelay=30s
dpdtimeout=120s
dpdaction=restart
auto=start

Алхам 4: PSK -ийг Peer-to-Peer танилтанд (Authentication) тохируулах

Виртуал машинуудаа тохируулсан бол одоо машинууд хоорондоо солилцох хэйш (hash) дараах командаар үүсгэнэ. Энэ хэйшийг бид Pre-Shared Key (PSK) болгож ашиглана.

head -c 32 /dev/urandom | base64

Миний тохиолдолд дараах хэйш үүслээ.

ajnAw9RnUYSUXnf9B2B3qEJpJukIHXDj6IlTH+lkjk0=

Дээрх командаас гарч ирсэн хэйшийг хоёр виртуал машины /etc/ipsec.secrets файл дотор дараах байдлаар тус бүр нь хийж өгнө. Ингэснээр бид хэйшийг PSK болгон ашиглаж байна.

sudo nano /etc/ipsec.secrets

Ubuntu-1 машин дээр

192.168.88.170 192.168.88.169 : PSK “ajnAw9RnUYSUXnf9B2B3qEJpJukIHXDj6IlTH+lkjk0=”

Ubuntu-2 машин дээр

192.168.88.169 192.168.88.170 : PSK “ajnAw9RnUYSUXnf9B2B3qEJpJukIHXDj6IlTH+lkjk0=”

Одоо дараах командаар IPSec ээ дахин эхлүүлж холболтын төлөвийг шалгацгаая

sudo ipsec restart
sudo ipsec status

Одоо хоёр машин хоорондоо нэг нэгнийхээ дотоор хаягт хандаж байгаа эсэхийг ping командын тусламжтай үзэцгээе

Ubuntu-1 машинаас

ping 10.0.2.15

Ubuntu-2 машинаас

ping 192.168.0.101

Мөн IPSec холболтыг шалгахдаа хоёр машин дээр ssh суулгаж хооронд нь дотоод хаягаар нь холбож үзэж болно.

apt install ssh

Ubuntu-1 дээрээс

ssh ubuntu-2@10.0.2.15

Ubuntu-2 дээрээс

ssh ubuntu-1@192.168.0.101

IPSec ийг дараах командаар унтрааж асаана

sudo ipsec stop
sudo ipsec start

--

--

Temuujin Yavuuzandan
Temuujin Yavuuzandan

Written by Temuujin Yavuuzandan

Software engineer who is love to share

No responses yet