
我使用以下指南將我的樹莓派設定為接入點:
我正在轉送wlan0
並eth0
NAT 我的所有流量。效果很好!
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
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
現在效果很好!
答案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
介面存取的預設閘道。