我想使用两个独立的 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 流量无关。