iptables를 사용하여 인터페이스에서 VPN tun 인터페이스로 트래픽 리디렉션

iptables를 사용하여 인터페이스에서 VPN tun 인터페이스로 트래픽 리디렉션

나는 쉬운 것을 성취하려고 노력하고 있지만 뭔가 빠진 것 같습니다.

내 상자에는 인터페이스를 생성한 VPN 클라이언트가 실행 중입니다 tun0. 상자에는 에서 들어오는 외부 트래픽이 있습니다 eth0.

eth0트래픽을 에서 (으)로 전달하고 싶습니다 tun0. 다음 명령을 실행합니다.

iptables -A FORWARD -i eth0 -o tun0 -s 192.168.100.0/28 -j ACCEPT
iptables -A FORWARD -i tun0 -o eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -t nat -A POSTROUTING -s 192.168.100.0/28 -o tun0 -j MASQUERADE

특정 범위만 전달하려고 하므로 소스 IP 범위를 선택합니다.

tcpdump인터페이스를 실행하면 eth0범위 내의 컴퓨터에서 들어오는 트래픽을 볼 수 192.168.100.0/28있지만 tun0.

IP 전달은 당연히 켜져 있습니다.

여기서 내가 실제로 무엇을 놓치고 있는지 잘 모르겠습니다.

eth0is 192.168.10.93/24의 IP 구성은 tun0is입니다.10.8.8.15/24

➜  ~ ip r
default via 192.168.10.1 dev eth0  metric 100
10.8.8.0/24 dev tun0 scope link  src 10.8.8.15
172.17.0.0/16 dev docker0 scope link  src 172.17.0.1
172.30.32.0/23 dev hassio scope link  src 172.30.32.1
192.168.10.0/24 dev eth0 scope link  src 192.168.10.93  metric 100

답변1

이는 결국 트래픽이 192.168.100.0/28외부로 나가는 것에 관한 것일 수 있으므로 tun0 다음과 같이 해결할 수 있습니다.

ip rule add from 192.168.100.0/28 lookup 10000
ip route add default via ${tun0gwip} table 10000

또한 tun0 gw가 다른 네트워크로 다시 라우팅할 수 없다면 필요한 iptables MASQUERADE를 유지하세요.

답변2

다음은 문제를 해결한 정확한 명령 조합입니다.

vpn이름 이 아래인 새 라우팅 테이블을 생성합니다 .

➜  ~ cat /etc/iproute2/rt_tables
#
# reserved values
#
255 local
254 main
253 default
0   unspec
#
# local
#
#1  inr.ruhep
1 vpn

그런 다음 다음을 실행하십시오.

iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE

iptables -A FORWARD -i eth0 -o tun0 -s 192.168.100.0/28 -j ACCEPT
iptables -A FORWARD -i tun0 -o eth0 -j ACCEPT

iptables -A INPUT -i tun0 -m state --state RELATED,ESTABLISHED -j ACCEPT

ip route add default dev tun0 table vpn
ip route add 192.168.100.0/28 dev eth0 table vpn

ip rule add from 192.168.100.0/28 table vpn

관련 정보