控制 OpenVPN 的公开可见 IP 地址

控制 OpenVPN 的公开可见 IP 地址

我想使用两个独立的 IP 地址来分离主机上的服务。一个 IP 仅用于 OpenVPN,并将用作连接其他服务器的网关。另一个 IP 上提供所有类型的服务。

# /etc/network/interfaces

auto eth0
iface eth0 inet static
    address 123.245.100.147
    netmask 255.255.255.240
    gateway 123.245.100.145
    up ip addr add 123.245.100.148/28 dev eth0

### OpenVPN IP
auto eth0:1
iface eth0:1 inet static
    address 192.168.10.2
    netmask 255.255.255.0

我目前遇到的问题是我无法更改公开可见的 OpenVPN IP 地址。OpenVPN 确实在 123.245.100.147 上监听,但主机显然正在使用 123.245.100.148 进行出站流量。

# Extract from /etc/openvpn/server.conf

# Which local IP address should OpenVPN
# listen on? (optional)
local 123.245.100.147
[...]


# opened ports

root@srv02 /etc/openvpn $ netstat -tulpn
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN      2425/mysqld     
tcp        0      0 123.245.100.148:80      0.0.0.0:*               LISTEN      10386/apache2   
tcp        0      0 0.0.0.0:21              0.0.0.0:*               LISTEN      13836/proftpd: (acc
tcp        0      0 123.245.100.148:22      0.0.0.0:*               LISTEN      10170/sshd      
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      2868/exim4      
tcp6       0      0 ::1:25                  :::*                    LISTEN      2868/exim4      
udp        0      0 123.245.100.147:1194    0.0.0.0:*                           12477/openvpn

连接到 OpenVPN 根本不是问题。我要做的一切就是连接到 123.245.100.147,并使用 123.245.100.147 作为到其他目的地的源地址,同时让其他服务监听 123.245.100.148。在 123.245.100.148 上运行的服务的传出 IP 无关紧要。

然而,目前的情况是,客户端连接到 123.245.100.147,但外部可见的地址是 123.245.100.148。

感谢您的帮助。

解决方案

正如 Zoredache 所提到的,确实有一个 iptables 规则,但我在查看时没有看到iptables -nL

root@srv02 ~ $ iptables -nL
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination 

然而,揭示所有应用的规则iptables-save确实暴露了问题。

root@srv02 ~ $ iptables-save 
# Generated by iptables-save v1.4.14 on Wed Apr 22 23:30:08 2015
*filter
:INPUT ACCEPT [221621:230332072]
:FORWARD ACCEPT [130716:101992043]
:OUTPUT ACCEPT [253503:132488010]
COMMIT
# Completed on Wed Apr 22 23:30:08 2015
# Generated by iptables-save v1.4.14 on Wed Apr 22 23:30:08 2015
*nat
:PREROUTING ACCEPT [1370874:86580150]
:INPUT ACCEPT [1025247:61032269]
:OUTPUT ACCEPT [1408751:103150160]
:POSTROUTING ACCEPT [1408759:103150991]
-A POSTROUTING -s 10.8.0.0/24 -j SNAT --to-source 123.245.100.148
COMMIT
# Completed on Wed Apr 22 23:30:08 2015

答案1

您的防火墙是什么样的?OpenVPN 与路由 VPN 客户端发出的数据包的源地址无关。您的 iptables/firewall 配置中几乎肯定有某种 SNAT/MASQ 规则。您需要更改它。或者为您的 OpenVPN 客户端添加一条附加规则。OpenVPN 侦听的端口与路由 VPN 流量无关。

相关内容