Linux의 VPS, VPN 및 정책 라우팅

Linux의 VPS, VPN 및 정책 라우팅

SSH 연결은 일반 네트워크를 통과하지만 VPS의 다른 모든 트래픽은 VPN을 통과하도록 VPS에서 VPN을 구성하는 방법을 찾고 있습니다.

이를 위해 정책 라우팅을 사용하기로 결정했습니다.

/etc/iptables2/rt_tables 파일에 VPN이라는 새 라우팅 테이블을 추가했습니다.

그런 다음 SSH가 아닌 모든 패킷을 표시했습니다.

iptables -t mangle -A PREROUTING -p tcp ! --dport 22 -j MARK --set-mark 1
iptables -t mangle -A PREROUTING ! -p tcp -j MARK --set-mark 2
iptables -t mangle -A OUTPUT -p tcp ! --sport 22 -j MARK --set-mark 3
iptables -t mangle -A OUTPUT ! -p tcp -j MARK --set-mark 4

새로 생성된 정책에 할당합니다.

ip rule add fwmark 1 table VPN
ip rule add fwmark 2 table VPN
ip rule add fwmark 3 table VPN
ip rule add fwmark 4 table VPN

이제 OpenVPN은 기본적으로 모든 경로를 기본 경로 테이블에 추가하므로 --route-noexec를 사용하여 이러한 일이 발생하지 않도록 하고 환경 변수를 사용하여 VPN 라우팅 테이블에 기본 경로를 추가하는 스크립트를 만들었습니다.

openvpn --config [config file] --script-security 2 --route-noexec --route-up /home/user/script.sh 

스크립트 자체는 다음과 같습니다.

#cat script.sh

#!/bin/bash
ip route add default via $route_vpn_gateway table VPN

이 명령을 실행한 후에도 여전히 VPS에 로그인되어 있지만 외부 세계와는 연결되어 있지 않습니다.

라우팅 테이블에서 볼 수 있는 내용은 다음과 같습니다.

# ip route show table VPN

default via 10.7.7.1 dev tun0

# ip route show table main

default via [VPS Gateway] dev eth0 
10.7.7.0/24 dev tun0 proto kernel scope link src 10.7.7.210 
[VPS Gateway] dev ens3 scope link 

이제 기본 라우팅 테이블의 두 번째 행이 없어야 한다는 것을 이해했지만 이를 VPN 테이블로 이동하는 방법을 잘 모르겠습니다.

어떤 단서가 있나요? 또한 - 이 구성에서 제가 무엇을 놓치고 있는지 아시나요?

감사해요

관련 정보