Iptables

如果打開,iptables 會將流量轉發到 vpn 隧道

  • February 3, 2021

我使用以下指南將我的樹莓派設置為接入點:

Raspberry Pi 3 作為 wifi 接入點

我正在轉發和 NATing 我的所有流量wlan0eth0效果很好!

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客戶端配置中的參數處理的。

引用自:https://unix.stackexchange.com/questions/283801