
다음 가이드를 사용하여 라즈베리 파이를 액세스 포인트로 설정했습니다.
Wi-Fi 액세스 포인트로 Raspberry Pi 3 사용
모든 트래픽을 전달 wlan0
하고 NAT하고 있습니다. eth0
훌륭하게 작동합니다!
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
sudo iptables -A FORWARD -i eth0 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT
sudo iptables -A FORWARD -i wlan0 -o eth0 -j ACCEPT
tun0-00
이제 인터페이스 사용 과 전달을 제외하고 동일한 규칙을 설정하고 싶습니다.모두VPN 터널을 통한 트래픽입니다. 나는 모든 것을 보내고 싶습니다. 호스트 네트워크로 누출되는 것은 원하지 않습니다. 생각해 보면 다음과 같습니다.
sudo iptables -t nat -A POSTROUTING -o tun0-00 -j MASQUERADE
sudo iptables -A FORWARD -i tun0-00 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT
sudo iptables -A FORWARD -i wlan0 -o tun0-00 -j ACCEPT
불행하게도 나는 이러한 iptables 규칙이 완전하지 않다는 것을 알고 있습니다. 문제는 eth0
계속 유지된다는 것입니다. 트래픽을 전달하는 원래 규칙은 eth0
여전히 존재합니다.
터널이 열려 있으면 모든 트래픽을 터널을 통해 보내고 싶습니다. 그렇지 않다면 eth0
.
업데이트:
-I 플래그를 사용하여 규칙을 삽입했습니다.
sudo iptables -t nat -I POSTROUTING 1 -o tun0-00 -j MASQUERADE
sudo iptables -I FORWARD 1 -i tun0-00 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT
sudo iptables -I FORWARD 1 -i wlan0 -o tun0-00 -j ACCEPT
FORWARD 체인:
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
num pkts bytes target prot opt in out source destination
1 0 0 ACCEPT all -- wlan0 tun0-00 0.0.0.0/0 0.0.0.0/0
2 0 0 ACCEPT all -- tun0-00 wlan0 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
3 0 0 ACCEPT all -- eth0 wlan0 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
4 0 0 ACCEPT all -- wlan0 eth0 0.0.0.0/0 0.0.0.0/0
5 0 0 ACCEPT all -- wlan1 wlan0 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
6 0 0 ACCEPT all -- wlan0 wlan1 0.0.0.0/0 0.0.0.0/0
여전히 기쁨이 없습니다. 전달이 작동하지 않는 것 같습니다.
클라이언트 VPN 구성
민감해 보이는 것들을 제거했습니다.
dev tun
persist-tun
persist-key
cipher AES-256-CBC
auth SHA1
tls-client
client
resolv-retry infinite
remote XXX.XXX.XXX.XXX PORT_NUM udp
lport XXX
verify-x509-name "VPN_Certificate" name
pkcs12 CERT_NAME.p12
tls-auth CERTIFICATE-tls.key 1
ns-cert-type server
redirect-gateway local def1
파이는 잘 연결되고 다른 공용 IP를 반영합니다. 클라이언트는 여전히 파이를 게이트웨이로 표시하지만 더 이상 연결할 수 없습니다.
해결책
redirect-gateway def1
먼저 pi의 .ovpn 파일에 추가해야 했습니다 .
그런 다음 실제로 인터페이스 이름을 올바르게 입력해야 했습니다... 윽. 미친 사람인 것 같은 기분이 들지만 분명히 tun0-00
처음에 봤고 그때가 유일하게 존재했던 것 같아요. 인터페이스는 실제로 tun0
.
따라서 적절한 iptables 명령은 다음과 같습니다.
sudo iptables -t nat -I POSTROUTING 1 -o tun0 -j MASQUERADE
sudo iptables -I FORWARD 1 -i tun0 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT
sudo iptables -I FORWARD 1 -i wlan0 -o tun0 -j ACCEPT
지금은 잘 작동합니다!
답변1
내에는 두 가지 규칙 세트가 모두 필요합니다 iptables
. 두 규칙 세트는 지정된 인터페이스에서 나가는 트래픽이 적절하게 매스커레이딩되도록 보장합니다. 내 제안은 다음과 같습니다. 귀하의 제안보다 조금 더 간단합니다.
# Masquerade outgoing traffic
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE
# Allow return traffic
iptables -A INPUT -i eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -i tun0 -m state --state RELATED,ESTABLISHED -j ACCEPT
# Forward everything
iptables -A FORWARD -j ACCEPT
누락된 퍼즐 부분은 라우팅입니다. 터널이 작동 중이면 "모든" 나가는 트래픽이 이를 사용하기를 원합니다. 그렇지 않으면 일반 경로를 사용하십시오.
이것이 처리된다OpenVPN 내에서redirect-gateway def1
클라이언트 구성에서 매개변수를 사용합니다 .
답변2
편리한 도구는 줄 번호와 함께 기존 규칙을 나열하는 것입니다.
iptables --line-numbers -t filter -L FORWARD
다음 옵션을 사용하여 규칙을 삭제할 수 있습니다 -D
.
iptables -t filter -D FORWARD 1
다음 옵션을 사용하여 지정된 위치에 새 규칙을 삽입할 수 있습니다 -I
.
iptables -t filter -I FORWARD 0 blah-blah-blah
이렇게 하면 테이블 맨 처음에 새 규칙이 삽입되므로 첫 번째 차례에 참조됩니다.
편집하다:
FORWARD
일반적으로 테이블에는 다음과 일치하는 규칙이 하나만 필요합니다 -m state --state RELATED,ESTABLISHED
.
-I FORWARD 1 -m state --state RELATED,ESTABLISHED -j ACCEPT
연결 추적을 통해 이미 알려진 모든 연결을 라우팅할 수 있습니다.
그리고 네, 설정해야 합니다정책 라우팅wlan
인터페이스 를 통해 도달할 가능성이 가장 높은 기본 게이트웨이가 아니라 인터페이스를 ethernet
통해 트래픽을 전달합니다 vpn
.