我的 iptables 規則有什麼問題,導致它無法路由到 openvpn?
相反,
firewalld
將通過簡單的設置來進行路由masquerade
。所以我確信其餘的設置都是正確的。這是一般的想法:$$ App -> tun0(10.0.0.2) -> Openvpn Client $$—->$$ Openvpn Server(10.0.0.1) -> eth0->Public IP $$—->$$ some IP’s on www $$
為了實現它,這裡是客戶端的 openvpn 配置(簡要):
daemon dev tun remote 70.34.22.247 rport 1100 lport 1100 proto udp ifconfig 10.0.0.2 10.0.0.1 writepid /run/tunpid verb 4 route 209.51.188.116 255.255.255.255 vpn_gateway #gnu.org for debug test
顯然,在 IP 209.51.188.116/32 上添加的路由規則確保它會自動要求 openvpn 伺服器(位於 10.0.0.1)為它路由請求。
curl 209.51.188.116
將測試openvpn是否可以完成工作。我已經確認打開這個 openvpn 隧道,它卡住了,但是沒有隧道,它可以工作。我還發現登錄 openvpn 伺服器站點,所以隧道內的流量確實發生了。儘管“tcpdump”沒有顯示流量conntrack -E
,但確實顯示了流量。以下是伺服器的配置,其日誌級別為 7,以便記錄隧道內的任何數據包:dev tun0 lport 1100 proto udp ifconfig 10.0.0.1 10.0.0.2 verb 7
CentOS 7 的路由功能明顯上:
# cat /proc/sys/net/ipv4/ip_forward 1
而對於 iptables,我使用的是 iptables 服務,這意味著它會使用 自動載入設置
systemctl restart iptables
,並且載入成功,否則會發生錯誤並systemctl status iptables
顯示錯誤狀態。這是關於的配置/etc/sysconfig/iptables
:# Generated by iptables-save v1.4.21 on Thu Jun 9 14:12:50 2022 *nat :PREROUTING ACCEPT [27:1704] :INPUT ACCEPT [12:648] :OUTPUT ACCEPT [3:216] :POSTROUTING ACCEPT [3:216] #-A POSTROUTING -s 10.0.0.0/8 -j MASQUERADE -A POSTROUTING -s 10.0.0.0/8 -j SNAT --to-source 70.34.22.247 COMMIT # Completed on Thu Jun 9 14:12:50 2022 # Generated by iptables-save v1.4.21 on Thu Jun 9 14:12:50 2022 *filter :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [160:19179] -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT -A INPUT -p icmp -j ACCEPT -A INPUT -i lo -j ACCEPT -A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT -A INPUT -p udp --dport 1100 -j ACCEPT -A INPUT -j REJECT --reject-with icmp-host-prohibited -A FORWARD -s 10.0.0.0/8 -j ACCEPT -A FORWARD -j REJECT --reject-with icmp-host-prohibited COMMIT
我懷疑是否
-j MASQUERADE
不起作用,所以我將其更改為直接 SNAT 到 eth0 的地址。但這也行不通。當然,相比之下,如果我禁用iptables
,並firwalld
改用,並設置接受1100/udp
,add-masquerade
一切正常。所以問題一定出在上面的配置上。你知道iptables的配置有什麼問題嗎?
看起來前鋒在一個方向上是允許的,但在另一個方向上是不允許的。我建議使用介面名稱而不是 IP 地址。
例子:
-A FORWARD -i eth0 -o tun0 -j ACCEPT -A FORWARD -i tun0 -o eth0 -j ACCEPT