Iptables

配置伺服器以通過 OpenVPN 路由所有流量

  • March 30, 2012

我有一個執行良好的 openvpn 設置。有大約 50 個客戶端連接,一切都很方便,花花公子。我需要這些客戶端之一通過 vpn 路由所有流量。我ccd為該特定客戶設置了一個並將其添加push "redirect-gateway def1"到其中。路由表似乎在客戶端更新。我可以訪問 vpn 中的所有主機,但無法訪問 vpn 之外的任何其他內容。當從客戶端跟踪路由時,一切都進入 vpn 網關,但之後就沒有了。我認為罪魁禍首是伺服器中的 iptables 配置。

這是設置

  • 我有一個使用子網 10.170.xx 的 openvpn,vpn 網關位於 10.170.0.1 (VPNGATEWAY)
  • 我有不同的子網 10.171.xx 通過 ccd 記錄分配其 ip(這是管理網路,有 3 個客戶端)
  • 我希望通過 vpn 獲得所有流量的客戶端是 10.171.0.1 (CLIENT)

從 10.171.0.1 (CLIENT) 我可以 ping 10.170.0.1 (VPNGATEWAY)。實際上我可以ping通10.170.xx和10.171.xx的所有主機,但是不能ping通8.8.8.8。

這是 iptables 配置文件

有一堆規則,我拿出來讓它更簡單。

*filter
:INPUT DROP [1000:900000]
:FORWARD DROP [0:0]
:OUTPUT DROP [0:0]

-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT 
-A INPUT -s 127.0.0.1 -j ACCEPT 

# here were some rules accepting certain ports  22, 80, etc

-A INPUT -p icmp -m icmp --icmp-type 8 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT 
-A INPUT -p icmp -m icmp --icmp-type 13 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT 
-A INPUT -p icmp -m icmp --icmp-type 30 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT 

# this is the client that needs internet thru the gateway
# i've tried to make as permissive as possible but still to no avail
-A INPUT -s 10.171.0.1 -j ACCEPT
-A FORWARD -s 10.171.0.1 -j ACCEPT

-A FORWARD -j REJECT --reject-with icmp-port-unreachable 
-A OUTPUT -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT 
COMMIT

我還嘗試添加

iptables -t nat -A POSTROUTING -s 10.171.0.1 -o eth0 -j MASQUERADE

但仍然沒有工作。有任何想法嗎?

你有這兩條規則來允許你的交通。但這些規則可能不是你想要的。

或者至少不僅僅是你想要的。

-A INPUT -s 10.171.0.1 -j ACCEPT
-A FORWARD -s 10.171.0.1 -j ACCEPT

您的防火牆規則集似乎設計為有狀態的,但這兩條規則是無狀態的。您要麼需要添加兩條規則來處理另一個方向的流量,要麼添加一些狀態匹配。

引用自:https://serverfault.com/questions/374898