使用 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 地址吗?
  • 您需要在规则中匹配特定的目标 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 中时应该可以正常工作

相关内容