나는 쉬운 것을 성취하려고 노력하고 있지만 뭔가 빠진 것 같습니다.
내 상자에는 인터페이스를 생성한 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 전달은 당연히 켜져 있습니다.
여기서 내가 실제로 무엇을 놓치고 있는지 잘 모르겠습니다.
eth0
is 192.168.10.93/24
의 IP 구성은 tun0
is입니다.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