다음 가이드를 사용하여 Raspberry Pi를 액세스 포인트로 설정했습니다.
WiFi 액세스 포인트로서의 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
앞으로 체인:
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를 반영합니다. 클라이언트는 여전히 pi를 게이트웨이로 표시하지만 더 이상 연결할 수 없습니다.
해결책
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