使用 Iptables 進行 SNAT 或 DNAT 的 openvpn 連接埠轉送?

使用 Iptables 進行 SNAT 或 DNAT 的 openvpn 連接埠轉送?

我已經成功設定了 openvpn 並讓它向客戶端發出靜態內部 ip。現在我遇到的麻煩是我現在嘗試為每個客戶端分配開放端口,因為它們現在擁有靜態內部 IP,這使得添加規則變得很容易。我遇到的問題是如何透過 iptables 正確執行此操作。

用戶端推送的內部靜態 IP 10.8.0.10 範例是轉送連接埠 1234

我嘗試過這個,但沒有成功 vpn 確實使用 udp 並在端口 1194 上,但嘗試了將以下規則修改為 udp 和 tcp 以及兩者一起修改。請注意 vpn 已經可以工作並且具有偽裝規則,但除此之外 iptables 是空的。

iptables -t nat -A PREROUTING -p tcp --dport 1234 -j DNAT --to-destination 10.8.0.10
iptables -A FORWARD -s 10.8.0.10 -p tcp --dport 1234 -j ACCEPT

我還嘗試過 10.8.0.1 作為網關,10.8.0.10 作為客戶端,需要轉發所有端口

iptables -t nat -A PREROUTING -d 10.8.0.1 -j DNAT --to-destination 10.8.0.10

我試圖完成兩件事,首先能夠為每個客戶端轉發一個端口,如果需要的話,如果他們需要轉發所有端口,則可以轉發靜態公共IP。

openvpn 伺服器.conf

local 123.123.123.123 #- your_server_ip goes here
port 1194 #- port
proto udp #- protocol
client-config-dir /etc/openvpn/ccd
push "route 10.8.0.0 255.255.0.0"
ifconfig-pool-persist /etc/openvpn/openvpn.dhcp 30
dev tun
tun-mtu 1500
tun-mtu-extra 32
mssfix 1450
ca /etc/openvpn/easy-rsa/2.0/keys/ca.crt
cert /etc/openvpn/easy-rsa/2.0/keys/server.crt
key /etc/openvpn/easy-rsa/2.0/keys/server.key
dh /etc/openvpn/easy-rsa/2.0/keys/dh1024.pem
plugin /etc/openvpn/radiusplugin.so /etc/openvpn/radiusplugin.cnf
client-cert-not-required
username-as-common-name
server 10.8.0.0 255.255.255.0
push redirect-gateway def1
push dhcp-option DNS 8.8.8.8
push dhcp-option DNS 8.8.4.4
keepalive 5 30
comp-lzo
persist-key
persist-tun
status 1194.log
verb 3

iptables-save:

# Generated by iptables-save v1.3.5 on Sun Aug 26 14:27:12 2012
*nat
:PREROUTING ACCEPT [4834:503608]
:POSTROUTING ACCEPT [1000:70847]
:OUTPUT ACCEPT [1000:70847]
-A POSTROUTING -s 10.8.0.0/255.255.255.0 -o eth0 -j MASQUERADE
COMMIT
# Completed on Sun Aug 26 14:27:12 2012
# Generated by iptables-save v1.3.5 on Sun Aug 26 14:27:12 2012
*filter
:INPUT ACCEPT [21545:23742094]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [14867:1938275]
COMMIT
# Completed on Sun Aug 26 14:27:12 2012

答案1

對我來說效果很好。有幾點要檢查:

  • 這不會從 VPN 伺服器本身建立 NAT 連接,為此您需要 OUTPUT 鏈中的規則。
  • 客戶端是否配置為路由全部透過 VPN 的流量?如果沒有,您可能會發現回應資料包沒有透過 VPN 傳回。
  • 您確定使用的是客戶端 IP 位址,而不是該客戶端點對點連線的伺服器端嗎?
  • 您需要匹配規則中的特定目標 IP,否則您將捕獲該連接埠號碼上的其他連線。
  • 將所有連接 NAT 到 10.8.0.1 可能會導致問題,因為所有用戶端都透過此 IP 路由流量。

答案2

-A  PREROUTING -p tcp -m tcp --dport 1234 -j DNAT --to-destination 10.8.0.10

就是你要找的:)

我自己也經歷過同樣的問題

我看到並假設您使用 ccd 檔案來推送靜態內部 IP?如果是這樣,當編輯到你的 iptables 中時,上述規則應該有效

相關內容