使用一个网卡伪装 IPTables

使用一个网卡伪装 IPTables

我正在运行只有一个 NIC 的 OpenVPN 服务器。

这是我当前的布局:

public.ip > Cisco firewall > lan.ip > OpenVPN server

lan.ip = 192.168.22.70

思科防火墙将请求转发到 oVPN 服务器,因此到目前为止一切正常,客户端能够连接。

但是,所有连接的客户端都应该能够访问 3 个网络:

lan1: 192.168.200.0 (vpn lan)    > tun0
lan2: 192.168.110.0 (office lan) > eth1 (gw 192.168.22.1)
lan3: 192.168.22.0  (server lan) > eth1 (broadcast network)

因此 tun0 被映射到 eth1。

Iptables 输出:

# iptables-save 
# Generated by iptables-save v1.4.2 on Wed Feb 16 14:14:20 2011
*filter
:INPUT ACCEPT [327:26098]
:FORWARD DROP [305:31700]
:OUTPUT ACCEPT [291:27378]
-A INPUT -i lo -j ACCEPT 
-A INPUT -i tun0 -j ACCEPT 
-A INPUT -i ! tun0 -p udp -m udp --dport 67 -j REJECT --reject-with icmp-port-unreachable 
-A INPUT -i ! tun0 -p udp -m udp --dport 53 -j REJECT --reject-with icmp-port-unreachable 
-A FORWARD -d 192.168.200.0/24 -i tun0 -j DROP 
-A FORWARD -s 192.168.200.0/24 -i tun0 -j ACCEPT 
-A FORWARD -d 192.168.200.0/24 -i eth1 -j ACCEPT 
COMMIT
# Completed on Wed Feb 16 14:14:20 2011
# Generated by iptables-save v1.4.2 on Wed Feb 16 14:14:20 2011
*nat
:PREROUTING ACCEPT [302:26000]
:POSTROUTING ACCEPT [3:377]
:OUTPUT ACCEPT [49:3885]
-A POSTROUTING -o eth1 -j MASQUERADE 
COMMIT
# Completed on Wed Feb 16 14:14:20 2011

然而,客户端无法 ping 任何 IP(包括 192.168.200.1,即 oVPN 的 IP)

当机器使用 2 个 NIC 直接连接到互联网时,可以通过在 oVPN 客户端的配置中伪装和添加静态路由来轻松解决问题。

但是,由于伪装不接受虚拟接口(eth0:0等),我无法再次使伪装工作(并且我甚至不确定是否需要虚拟接口)。

谢谢。

编辑:

OpenVPN 服务器:

# ifconfig 
eth1      Link encap:Ethernet  HWaddr ba:e6:64:ec:57:ac  
          inet addr:192.168.22.70  Bcast:192.168.22.255  Mask:255.255.255.0
          inet6 addr: fe80::b8e6:64ff:feec:57ac/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:6857 errors:0 dropped:0 overruns:0 frame:0
          TX packets:4044 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:584046 (570.3 KiB)  TX bytes:473691 (462.5 KiB)
          Interrupt:14 

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:334 errors:0 dropped:0 overruns:0 frame:0
          TX packets:334 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:33773 (32.9 KiB)  TX bytes:33773 (32.9 KiB)

tun0      Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00  
          inet addr:192.168.200.1  P-t-P:192.168.200.2  Mask:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

客户端上的 ifconfig:

# ifconfig 
eth0      Link encap:Ethernet  HWaddr 00:22:64:71:11:56  
          inet addr:192.168.110.94  Bcast:192.168.110.255  Mask:255.255.255.0
          inet6 addr: fe80::222:64ff:fe71:1156/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:3466 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1838 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:997924 (974.5 KiB)  TX bytes:332406 (324.6 KiB)
          Interrupt:17 

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:37847 errors:0 dropped:0 overruns:0 frame:0
          TX packets:37847 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:2922444 (2.7 MiB)  TX bytes:2922444 (2.7 MiB)

tun0      Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00  
          inet addr:192.168.200.30  P-t-P:192.168.200.29  Mask:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:689 errors:0 dropped:18 overruns:0 carrier:0
          collisions:0 txqueuelen:100 
          RX bytes:0 (0.0 B)  TX bytes:468778 (457.7 KiB)

wlan0     Link encap:Ethernet  HWaddr 00:16:ea:db:ae:86  
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:704699 errors:0 dropped:0 overruns:0 frame:0
          TX packets:730176 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:520385963 (496.2 MiB)  TX bytes:225210422 (214.7 MiB)

客户端配置末尾的静态路由行(我一直在研究 192.168.200.0 --(取消)注释以查看是否有任何变化):

route 192.168.200.0 255.255.255.0
route 192.168.110.0 255.255.255.0
route 192.168.22.0 255.255.255.0

VPN 客户端上的路由:

# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.200.29  0.0.0.0         255.255.255.255 UH    0      0        0 tun0
192.168.22.0    192.168.200.29  255.255.255.0   UG    0      0        0 tun0
192.168.200.0   192.168.200.29  255.255.255.0   UG    0      0        0 tun0
192.168.110.0   192.168.200.29  255.255.255.0   UG    0      0        0 tun0
192.168.110.0   0.0.0.0         255.255.255.0   U     0      0        0 eth0
0.0.0.0         192.168.110.1   0.0.0.0         UG    0      0        0 eth0

编辑:

奇怪的是,如果我设置

push "redirect-gateway def1"

在服务器配置中,(从而通过 VPN 路由所有流量,这不是我想要的),它似乎有效。

答案1

我发现这里有两个可能的问题。首先,您的 OpenVPN 客户端可能无法从 OpenVPN 配置中获取到 LAN 的静态路由。其次,您的 OpenVPN 服务器似乎不是 LAN 主机的默认网关。因此,您应该添加另一条规则以iptables允许数据包正确路由回您的 OpenVPN 服务器。如下所示:

-A POSTROUTING -o eth1 -j SNAT -s 192.168.200.0/24 -d 192.168.22.0/24 --to-source 192.168.22.70

我假设 192.168.22.70 是您的 OpenVPN 服务器的 LAN 地址。

答案2

显然,VPN 在办公室外一直在运行。

它只是没有为 192.168.110.0 网络(办公室)内的人们路由任何内容。

vpn.domain.tld 指向 LAN 中的 192.168.22.70。

通过将 vpn.domain.tld 更改为指向 VPN 服务器的公共 IP 地址,问题得到了解决,这有点奇怪。

我所说的公共 IP 地址是指映射到 Cisco 防火墙 (91.220.102.x) 的地址,所有数据包都转发到 VPN 的 LAN IP (192.168.22.70)(请参阅我原始帖子中的布局)。

办公室不需要 VPN,但由于 VPN 在 Windows 机器上作为服务启动,我还无法控制它何时启动以及何时不启动(理想情况下仅在办公室外启动 - 但那是以后的事了)。

感谢您的所有帮助。

相关内容