브리지된 네트워크가 있습니다.br0IP로10.0.0.1/24, 해당 IP에 연결된 클라이언트가 있습니다10.0.0.2그것에. VPN 연결도 있습니다(Tun0)에는 DHCP에서 할당한 IP가 있으므로 IP가 다를 수 있습니다. VPN 연결은 시스템의 기본 경로가 아니므로 장치의 모든 트래픽은 일반 경로를 통과합니다.이더넷 0라우팅(VPN 라우팅 아님). (호스트에서 IPv4 전달이 활성화되어 있습니다)
내가 달성하고 싶은 것은 연결된 모든 클라이언트입니다.br0(내 경우에는 LXC 컨테이너) 게이트웨이는 다음과 같이 설정됩니다.10.0.0.1해당 트래픽은 NAT로 연결되고 VPN 연결을 통해 라우팅되어야 합니다.
바로 붙여넣기가 불가능하기 때문에Tun0장비 도착br0, 다음을 사용하여 트래픽을 전달하려고 합니다.iptables.
그래서 제가 취해야 할 조치는 흐름을 강제하는 것입니다.br0변장한 다음 앞으로Tun0다음 명령을 사용하여:
iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE
iptables -A FORWARD -i br0 -o tun0 -j ACCEPT
상태 추적도 추가했지만 작동하지 않습니다.
iptables -A INPUT -i br0 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -i tun0 -m state --state RELATED,ESTABLISHED -j ACCEPT
보조 기본 경로를 추가하기 위해 "/etc/iproute2/rt_tables" 파일에 "1 vpnout" 항목을 추가하고 기본 경로를 추가했습니다.
ip route add default dev vpn-out table vpnout
이것은 작동하지 않으며 다음 명령과 동일한 결과를 갖습니다.
ip route add default via dev vpn-out table vpnout
ip rule add from 10.0.0.0/24 table vpnout
ip rule add to 10.0.0.0/24 table vpnout
하지만 그 후에도 여전히 핑을 할 수 없습니다8.8.8.8연결된 클라이언트에서br0. 내가 뭐 놓친 거 없니?
답변1
그래서 마침내 @Fiisch의 제안으로 마침내 누락된 설정을 발견했습니다.
이를 작동시키는 최종 명령은 다음과 같습니다.
iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE
iptables -A FORWARD -i br0 -o tun0 -j ACCEPT
iptables -A FORWARD -i tun0 -o br0 -j ACCEPT
iptables -A INPUT -i tun0 -m state --state RELATED,ESTABLISHED -j ACCEPT
ip route add default dev tun0 table vpnout
ip route add 10.0.0.0/24 dev br0 table vpnout
ip rule add from 10.0.0.0/24 table vpnout
ip rule add to 10.0.0.0/24 table vpnout