내부 네트워크의 라우터로 사용하는 centos 상자에서 openvpn 클라이언트를 실행하고 있습니다. 외부 세계에 대한 두 개의 인터페이스가 있습니다.
eth0 - normal internet
tun0 - openvpn tunnel
"route-noexec" 옵션을 넣어 openvpn 자동 경로 가져오기를 비활성화하고 이제 모든 경로를 수동으로 처리합니다. openvpn 터널을 열면 라우팅 테이블은 다음과 같습니다.
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.80.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
10.8.0.0 0.0.0.0 255.255.255.0 U 0 0 0 tun0
192.168.44.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
192.168.11.0 0.0.0.0 255.255.255.0 U 0 0 0 dummy0
169.254.0.0 0.0.0.0 255.255.0.0 U 1002 0 0 eth0
169.254.0.0 0.0.0.0 255.255.0.0 U 1003 0 0 eth1
0.0.0.0 192.168.44.1 0.0.0.0 UG 0 0 0 eth0
이제 Centos 시스템의 인터페이스 192.168.80.0에 내부 호스트가 연결되었습니다.
192.168.80.50
이 사용자의 모든 트래픽은 인터페이스 tun0을 통해 라우팅하고 다른 모든 트래픽은 eth0을 통해 라우팅해야 합니다.
이와 같은 POSTROUTING 규칙을 추가해 보았습니다.
iptables -t nat -A POSTROUTING -s 192.168.80.50 -o tun0 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
그러나 모든 클라이언트는 192.168.80.50을 포함하여 eth0만 통과합니다. 어떻게 해야 하나요?
답변1
기반으로슈퍼유저에 대한 답변입니다.:
일부 IP에 대한 라우팅 테이블을 만듭니다.
ip rule add from <sourceIP>/<mask> table <name>
그런 다음 라우팅 테이블과 일치하는 새 경로를 선언합니다 <name>
.
ip route add default via <router> dev tun0 table <name>
VPN을 사용해야 하는 경우, 이 구성을 사용하면 테이블의 모든 IP를 지정해야 하기 때문에 서브넷을 갖는 것이 더 쉬울 것입니다.<name>
답변2
선택한 VPN 클라이언트의 모든 트래픽이 VPN 터널을 통과하도록 하려면 이 사용자 구성에서 이를 "클라이언트에서"로 설정해야 합니다. 클라이언트 구성 파일에는 "redirect-gateway autolocal" 옵션이 있습니다. VPN 서버에서 이 VPN 클라이언트 IP에 대해 SNAT 또는 MASQUERADE를 설정해야 할 수도 있습니다.
답변3
"iptables 소스 라우팅"과 이 기사를 살펴보십시오.https://www.linuxquestions.org/questions/linux-software-2/iptables-source-ip-based-gateway-route-681522/
특정 게이트웨이(귀하의 경우 VPN 연결의 끝점이 됨)를 사용하여 VPN 클라이언트에 대한 특정 라우팅 테이블을 생성한 다음 이 라우팅 테이블을 가리키는 iptables 규칙을 추가하면 됩니다.