[리눅스] VPN서버 설정 #2
페이지 정보
작성자 최고관리자 작성일25-09-25 19:38 조회61회 댓글0건관련링크
본문
* strongswan-swanctl 및 charon-systemd 로 IKEV2 VPN서버를 운영할 때, L2TP를 추가 하기 위한 방법
1. 패키지 추가
sudo apt update
sudo apt install xl2tpd ppp
2. /etc/swanctl/swanctl.conf 에 연결 추가
connections {
# ... (기존 연결들)
l2tp-psk {
version = 1
proposals = aes128-sha1-modp1024,3des-sha1-modp1024
local_addrs = %any
local {
auth = psk
id = 서버이름(예: vpn.vpnserver.com)
}
remote {
auth = psk
id = %any
}
# L2TP는 IPsec 'transport' + 1701/udp만 보호
children {
l2tp {
mode = transport
start_action = start
close_action = none
dpd_action = clear
esp_proposals = aes128-sha1,3des-sha1
# L2TP 포트 바인딩 (UDP/1701)
local_ts = 0.0.0.0/0
remote_ts = 0.0.0.0/0
}
}
# = rekey 비활성(혹은 children.l2tp.rekey_time=0s)
# L2TP/ikev1은 재키잉으로 끊김날 수 있어 rekey 비권장
rekey_time = 0s
dpd_delay = 30s
}
}
secrets {
# ... (기존 secrets)
ike-l2tp-psk {
id = 서버이름(예: vpn.vpnserver.com)
secret = "공유비밀번호"
}
}
3. L2TP 환겨 설정 (/etc/xl2tpd/xl2tpd.conf)
[global]
; listen-addr = 0.0.0.0
[lns default]
; IP를 IKEv2와 나눠쓰려고...
ip range = 10.10.10.128-10.10.10.250
local ip = 10.10.10.1
require chap = yes
refuse pap = yes
require authentication = yes
name = l2tpd
pppoptfile = /etc/ppp/options.xl2tpd
length bit = yes
4. PPP 환경 설정 (/etc/ppp/options.xl2tpd)
require-mschap-v2
refuse-pap
refuse-chap
refuse-mschap
auth
mtu 1400
mru 1400
ms-dns 8.8.8.8 # 내부 DNS가 있으면 그걸로 교체
asyncmap 0
# crtscts
# lock
hide-password
# modem
proxyarp
lcp-echo-interval 20
lcp-echo-failure 5
noccp
5. 로그인 정보 (/etc/ppp/chap-secrets)
# user service password assigned-IP
user1 l2tpd 강력한비번 *
6. 서비스 시작
sudo systemctl enable --now xl2tpd
7. 커널포워딩 및 보안 sysctl
sudo tee /etc/sysctl.d/99-vpn-l2tp.conf >/dev/null <<'EOF'
net.ipv4.ip_forward=1
net.ipv4.conf.all.accept_redirects=0
net.ipv4.conf.default.accept_redirects=0
net.ipv4.conf.all.send_redirects=0
net.ipv4.conf.default.send_redirects=0
EOF
sudo sysctl --system
8. 방화벽 설정
- iptables 사용시
# IKE/NAT-T
iptables -A INPUT -p udp --dport 500 -j ACCEPT
iptables -A INPUT -p udp --dport 4500 -j ACCEPT
# L2TP(1701)는 반드시 "IPsec 정책 일치"시에만 허용
iptables -A INPUT -p udp --dport 1701 -m policy --dir in --pol ipsec -j ACCEPT
# 평문(비보호) 1701은 거부(다른 규칙에서 허용되지 않게)
iptables -A INPUT -p udp --dport 1701 -j DROP
# L2TP 풀 → 인터넷 NAT (외부 NIC 가정: eth0)
iptables -t nat -A POSTROUTING -s 10.10.10.0/24 -o eth0 -j MASQUERADE
iptables -A FORWARD -s 10.10.20.0/24 -o eth0 -j ACCEPT
iptables -A FORWARD -d 10.10.20.0/24 -m state --state ESTABLISHED,RELATED -i eth0 -j ACCEPT
- nftables 사용시
nft add table inet vpn
nft 'add chain inet vpn input { type filter hook input priority 0; }'
nft 'add chain inet vpn forward { type filter hook forward priority 0; }'
nft 'add chain inet vpn post { type nat hook postrouting priority 100; }'
nft add rule inet vpn input udp dport {500,4500} accept
# 1701은 IPsec 보호 트래픽만
nft add rule inet vpn input udp dport 1701 ipsec in reqid 0x0 accept
nft add rule inet vpn input udp dport 1701 drop
nft add rule inet vpn post ip saddr 10.10.10.0/24 oif "eth0" masquerade
nft add rule inet vpn forward ip saddr 10.10.20.0/24 oif "eth0" accept
nft add rule inet vpn forward ip daddr 10.10.20.0/24 iif "eth0" ct state related,established accept
9. 동작확인
* IPSec 수립 상태
sudo swanctl --list-sas
journalctl -u strongswan-swanctl -n 100 --no-pager
* L2TP/PPP
journalctl -u xl2tpd -n 100 --no-pager
ip a | grep ppp
10. VirtualBox Guest 운영체제에서 VPN 서버 설치시 Guest OS에서 실행해야할 IPTABLE 규칙
WAN=enp0s3
VPNNET="10.10.10.0/24"
iptables -F INPUT
iptables -F FORWARD
iptables -t nat -X
# L2TP(1701) IPSec 보호 트래픽만 허용
iptables -A INPUT -p udp --dport 1701 -m policy --dir in --pol ipsec -j ACCEPT
iptables -A INPUT -p udp --dport 1701 -j DROP
# IPv4 NAT
iptables -t nat -A POSTROUTING -s $VPNNET -o $WAN -j MASQUERADE
# Forwarding
iptables -A FORWARD -s $VPNNET -o $WAN -j ACCEPT
iptables -A FORWARD -d $VPNNET -m state --state ESTABLISHED,RELATED -i $WAN -j ACCEPT
sysctl -w net.ipv4.ip_forward=1
11. VirtualBox 에서 포트포워딩 규칙
| 규칙 | 프로토콜 | 호스트IP | 호스트포트 | 게스트IP | 게스트포트 |
| ----- | ---- | ----- | ----- | ----------- | ----- |
| IKE | UDP | (비워둠) | 500 | 게스트의 NAT IP | 500 |
| NAT-T | UDP | (비워둠) | 4500 | 게스트의 NAT IP | 4500 |
* strongswan-swanctl 및 charon-systemd 로 IKEV2 VPN서버를 운영할 때, L2TP를 추가 하기 위한 방법
1. 패키지 추가
sudo apt update
sudo apt install xl2tpd ppp
2. /etc/swanctl/swanctl.conf 에 연결 추가
connections {
# ... (기존 연결들)
l2tp-psk {
version = 1
proposals = aes128-sha1-modp1024,3des-sha1-modp1024
local_addrs = %any
local {
auth = psk
id = 서버이름(예: vpn.vpnserver.com)
}
remote {
auth = psk
id = %any
}
# L2TP는 IPsec 'transport' + 1701/udp만 보호
children {
l2tp {
mode = transport
start_action = start
close_action = none
dpd_action = clear
esp_proposals = aes128-sha1,3des-sha1
# L2TP 포트 바인딩 (UDP/1701)
local_ts = 0.0.0.0/0
remote_ts = 0.0.0.0/0
}
}
# = rekey 비활성(혹은 children.l2tp.rekey_time=0s)
# L2TP/ikev1은 재키잉으로 끊김날 수 있어 rekey 비권장
rekey_time = 0s
dpd_delay = 30s
}
}
secrets {
# ... (기존 secrets)
ike-l2tp-psk {
id = 서버이름(예: vpn.vpnserver.com)
secret = "공유비밀번호"
}
}
3. L2TP 환겨 설정 (/etc/xl2tpd/xl2tpd.conf)
[global]
; listen-addr = 0.0.0.0
[lns default]
; IP를 IKEv2와 나눠쓰려고...
ip range = 10.10.10.128-10.10.10.250
local ip = 10.10.10.1
require chap = yes
refuse pap = yes
require authentication = yes
name = l2tpd
pppoptfile = /etc/ppp/options.xl2tpd
length bit = yes
4. PPP 환경 설정 (/etc/ppp/options.xl2tpd)
require-mschap-v2
refuse-pap
refuse-chap
refuse-mschap
auth
mtu 1400
mru 1400
ms-dns 8.8.8.8 # 내부 DNS가 있으면 그걸로 교체
asyncmap 0
# crtscts
# lock
hide-password
# modem
proxyarp
lcp-echo-interval 20
lcp-echo-failure 5
noccp
5. 로그인 정보 (/etc/ppp/chap-secrets)
# user service password assigned-IP
user1 l2tpd 강력한비번 *
6. 서비스 시작
sudo systemctl enable --now xl2tpd
7. 커널포워딩 및 보안 sysctl
sudo tee /etc/sysctl.d/99-vpn-l2tp.conf >/dev/null <<'EOF'
net.ipv4.ip_forward=1
net.ipv4.conf.all.accept_redirects=0
net.ipv4.conf.default.accept_redirects=0
net.ipv4.conf.all.send_redirects=0
net.ipv4.conf.default.send_redirects=0
EOF
sudo sysctl --system
8. 방화벽 설정
- iptables 사용시
# IKE/NAT-T
iptables -A INPUT -p udp --dport 500 -j ACCEPT
iptables -A INPUT -p udp --dport 4500 -j ACCEPT
# L2TP(1701)는 반드시 "IPsec 정책 일치"시에만 허용
iptables -A INPUT -p udp --dport 1701 -m policy --dir in --pol ipsec -j ACCEPT
# 평문(비보호) 1701은 거부(다른 규칙에서 허용되지 않게)
iptables -A INPUT -p udp --dport 1701 -j DROP
# L2TP 풀 → 인터넷 NAT (외부 NIC 가정: eth0)
iptables -t nat -A POSTROUTING -s 10.10.10.0/24 -o eth0 -j MASQUERADE
iptables -A FORWARD -s 10.10.20.0/24 -o eth0 -j ACCEPT
iptables -A FORWARD -d 10.10.20.0/24 -m state --state ESTABLISHED,RELATED -i eth0 -j ACCEPT
- nftables 사용시
nft add table inet vpn
nft 'add chain inet vpn input { type filter hook input priority 0; }'
nft 'add chain inet vpn forward { type filter hook forward priority 0; }'
nft 'add chain inet vpn post { type nat hook postrouting priority 100; }'
nft add rule inet vpn input udp dport {500,4500} accept
# 1701은 IPsec 보호 트래픽만
nft add rule inet vpn input udp dport 1701 ipsec in reqid 0x0 accept
nft add rule inet vpn input udp dport 1701 drop
nft add rule inet vpn post ip saddr 10.10.10.0/24 oif "eth0" masquerade
nft add rule inet vpn forward ip saddr 10.10.20.0/24 oif "eth0" accept
nft add rule inet vpn forward ip daddr 10.10.20.0/24 iif "eth0" ct state related,established accept
9. 동작확인
* IPSec 수립 상태
sudo swanctl --list-sas
journalctl -u strongswan-swanctl -n 100 --no-pager
* L2TP/PPP
journalctl -u xl2tpd -n 100 --no-pager
ip a | grep ppp
10. VirtualBox Guest 운영체제에서 VPN 서버 설치시 Guest OS에서 실행해야할 IPTABLE 규칙
WAN=enp0s3
VPNNET="10.10.10.0/24"
iptables -F INPUT
iptables -F FORWARD
iptables -t nat -X
# L2TP(1701) IPSec 보호 트래픽만 허용
iptables -A INPUT -p udp --dport 1701 -m policy --dir in --pol ipsec -j ACCEPT
iptables -A INPUT -p udp --dport 1701 -j DROP
# IPv4 NAT
iptables -t nat -A POSTROUTING -s $VPNNET -o $WAN -j MASQUERADE
# Forwarding
iptables -A FORWARD -s $VPNNET -o $WAN -j ACCEPT
iptables -A FORWARD -d $VPNNET -m state --state ESTABLISHED,RELATED -i $WAN -j ACCEPT
sysctl -w net.ipv4.ip_forward=1
11. VirtualBox 에서 포트포워딩 규칙
| 규칙 | 프로토콜 | 호스트IP | 호스트포트 | 게스트IP | 게스트포트 |
| ----- | ---- | ----- | ----- | ----------- | ----- |
| IKE | UDP | (비워둠) | 500 | 게스트의 NAT IP | 500 |
| NAT-T | UDP | (비워둠) | 4500 | 게스트의 NAT IP | 4500 |
댓글목록
등록된 댓글이 없습니다.