Iptables
如果打開,iptables 會將流量轉發到 vpn 隧道
我使用以下指南將我的樹莓派設置為接入點:
我正在轉發和 NATing 我的所有流量
wlan0
。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
現在我想設置相同的規則,除了使用介面並通過我的 vpn 隧道
tun0-00
轉發我的**所有流量。**我確實想發送所有內容,不希望任何內容洩漏到主機網路中。想想它是這樣的: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
pi 連接得很好,反映了不同的公共 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
現在效果很好!
您將需要在
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
客戶端配置中的參數處理的。