通过公共接口路由 OpenVPN 隧道,并通过 NAT 接口路由出(到互联网)

通过公共接口路由 OpenVPN 隧道,并通过 NAT 接口路由出(到互联网)

我希望有人能帮帮忙...

我想配置 OpenVPN-AS(即 OpenVPN 访问服务器,而非 OpenVPN)以在我的 VPS 上运行。VPS 是运行 Ubunto 10.04 LTS 的 KVM,配置非常原始。OpenVPN-AS 的安装同样只带有极少的“特色”。

该服务器有两个接口(均为 DHCP,eth1 没有配置默认网关,但有一个可用):- eth0(不位于美国地理位置的公共 IP 地址),以及 - eth1(可通过位于美国的路由器进行 NAT 的私有 IP 地址)

大多数流量(包括 OpenVPN 隧道 (UDP/1194))通过 eth0 进入,但隧道客户端应通过 eth1“出去”,以获得美国 IP 地址的好处。我认为有两个独立的问题:1) 配置 IP,以便隧道客户端通过 NAT 路由器离开网关 2) 配置 OpenVPN-AS,以便客户端使用该网关访问互联网

文件 /etc/network/interfaces 如下:

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto eth0
iface eth0 inet dhcp

# The internal (private) network interface
auto eth1
iface eth1 inet dhcp
  up   ip route add default via 172.16.0.254  dev eth1  table 100
  down ip route del default via 172.16.0.254  dev eth1  table 100
  up   ip rule  add        from 172.16.0.0/16 iif eth1 lookup 100
  down ip rule  del        from 172.16.0.0/16 iif eth1 lookup 100
  up   iptables -t nat -A POSTROUTING -s 5.5.0.0/20 -j SNAT --to-source 172.16.191.125
  down iptables -t nat -D POSTROUTING -s 5.5.0.0/20 -j SNAT --to-source 172.16.191.125

网络如下:

root@us-tunnel:~# ifconfig | grep -A 1 encap
as0t0     Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
          inet addr:5.5.0.1  P-t-P:5.5.0.1  Mask:255.255.248.0
--
as0t1     Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
          inet addr:5.5.8.1  P-t-P:5.5.8.1  Mask:255.255.248.0
--
eth0      Link encap:Ethernet  HWaddr 00:16:3c:34:01:20
          inet addr:209.141.60.114  Bcast:209.141.60.255  Mask:255.255.255.0
--
eth1      Link encap:Ethernet  HWaddr 00:16:3c:55:84:81
          inet addr:172.16.191.125  Bcast:172.16.255.255  Mask:255.255.0.0
--
lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0

路由表如下:

root@us-tunnel:~# route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
209.141.60.0    *               255.255.255.0   U     0      0        0 eth0
5.5.0.0         *               255.255.248.0   U     0      0        0 as0t0
5.5.8.0         *               255.255.248.0   U     0      0        0 as0t1
172.16.0.0      *               255.255.0.0     U     0      0        0 eth1
default         209.141.60.1    0.0.0.0         UG    100    0        0 eth0

答案1

您需要执行几个步骤才能使其正常工作。

首先,您必须在配置文件中设置路由,以通过客户端适配器引导客户端流量。

您可以通过在客户端配置文件中添加“route”行来实现这一点,或者通过添加

"--pull" 

到客户端配置,然后将您的路线添加到服务器配置。

"push route 0.0.0.0 5.5.0.1"
"push route 0.0.0.0 5.5.8.1"

其次,您需要配置您的 iptables 以允许来自 vpn 网络的传入数据包,并在服务器端启用 masqurade 和 nat 转发。

启用数据包转发和 Nat

  1. 在内核中启用数据包转发

    echo 1 > /proc/sys/net/ipv4/ip_forward
    
  2. 在 iptables 中启用 NAT

    sudo iptables --table nat --append POSTROUTING --out-interface eth1 -j MASQUERADE
    
  3. 启用 VPN 接口转发

    sudo iptables --append FORWARD --in-interface as0t0 -j ACCEPT
    sudo iptables --append FORWARD --in-interface as0t1 -j ACCEPT
    

这是路由端的基本配置,如果您需要更详细的帮助,请随时发表评论。

相关内容