我正在尝试设置一个新的 dd-wrt 路由器以与 OpenVpn 配合使用。但是,我需要使用的 OpenVpn 有一个自动生成的配置文件。它看起来像:
# Automatically generated OpenVPN client config file
# Generated on Wed Sep 11 17:15:39 2013 by ip-10-164-12-159
# Note: this config file contains inline private keys
# and therefore should be kept confidential!
# Note: this configuration is user-locked to the username below
# OVPN_ACCESS_SERVER_USERNAME=openvpn
# Define the profile name of this particular configuration file
# OVPN_ACCESS_SERVER_PROFILE=-redacted-
# OVPN_ACCESS_SERVER_CLI_PREF_ALLOW_WEB_IMPORT=True
# OVPN_ACCESS_SERVER_CLI_PREF_ENABLE_CONNECT=True
# OVPN_ACCESS_SERVER_CLI_PREF_ENABLE_XD_PROXY=True
# OVPN_ACCESS_SERVER_WSHOST=-redacted-
# OVPN_ACCESS_SERVER_WEB_CA_BUNDLE_START
# -----BEGIN CERTIFICATE-----
# -redacted-
# -----END CERTIFICATE-----
# OVPN_ACCESS_SERVER_WEB_CA_BUNDLE_STOP
# OVPN_ACCESS_SERVER_IS_OPENVPN_WEB_CA=0
# OVPN_ACCESS_SERVER_ORGANIZATION=OpenVPN Technologies, Inc.
setenv FORWARD_COMPATIBLE 1
client
proto udp
nobind
remote -redacted-
port 443
dev tun
dev-type tun
ns-cert-type server
reneg-sec 604800
sndbuf 100000
rcvbuf 100000
auth-user-pass
# NOTE: LZO commands are pushed by the Access Server at connect time.
# NOTE: The below line doesn't disable LZO.
comp-lzo no
verb 3
setenv PUSH_PEER_INFO
<ca>
-----BEGIN CERTIFICATE-----
-redacted-
-----END CERTIFICATE-----
</ca>
<cert>
-----BEGIN CERTIFICATE-----
-redacted-
-----END CERTIFICATE-----
</cert>
<key>
-----BEGIN PRIVATE KEY-----
-redacted-
-----END PRIVATE KEY-----
</key>
key-direction 1
<tls-auth>
#
# 2048 bit OpenVPN static key (Server Agent)
#
-----BEGIN OpenVPN Static key V1-----
-redacted-
-----END OpenVPN Static key V1-----
</tls-auth>
如果 SSH 进入我的路由器(这意味着我已打开 sshd),我可以使用此配置连接到 OpenVpn 服务器。如果我查看 VPN 服务器访问控制页面,则显示我已成功连接。但是,我相信 dd-wrt 的路由表不会将流量从 wifi 设备发送到 VPN。
我对路由非常陌生,无法使用任何 dd-wrt 教程(它们都假设您使用另一种类型的配置,而我无法使用)。因此,我的问题分为两部分:
有人可以指导我以脚本方式设置 iptables(或任何从 wifi 网络设备发送流量的东西),以便我可以运行 iptables 脚本,然后在路由器上启动 OpenVPN。
我如何将其更改为仅在 VAP(虚拟接入点)上工作或仅与某些 IP 地址一起工作(因此只有连接到 AP 的 IP 为 xxxx 的设备才能通过 VPN)。
注意:我通常喜欢在我的计算机上安装这些脚本,然后将它们 ssh 到周围的 dd-wrt 路由器上,然后运行它们以打开 VPN 连接。
到目前为止,通过谷歌和这个网站对我没有太大帮助。
答案1
我主要基于将家庭 OpenVPN 设置迁移到 OpenWRT 的计划。它目前在 Fedora18 上实现,但我想将测试机器用于其他用途。我想象 DD-WRT 会类似,但由于实现困难,可能会有一些不准确之处。希望有更多 DD-WRT 经验的人能够支持我并消除任何障碍。
指令dev tun
表示您正在使用单独的子网,通常使用指令进行设置server
(我猜这部分是在 VPN 管理页面上处理的)。例如,server 10.0.0.0 255.255.255.0
意味着您的客户端将在其客户端的虚拟适配器上获得一个在此范围内的地址。
如果此设备是您的互联网路由器,则它被用作您网络的默认网关。如果您的无线设备没有为给定网络设置静态路由,它会询问默认网关。我怀疑发生的事情是您的 iptables 规则没有设置为根据输入接口查找和接受来自您的 VPN 子网的任何流量
您可以使用 查看您的 iptables 配置iptables -nvL --line-numbers
。想要将您的设备用作路由器的人会遇到类似以下的情况。
- 接受已建立的连接。
- 接受来自互联网的本地地址的连接,与您现有的任何端口转发规则相对应。
- 接受来自本地子网的流量。
- 丢弃/拒绝所有跨越规则链的剩余尝试。
如果您的 OpenVPN 子网未在阶段#3 中提及,那么它将进入阶段#4 并被丢弃。
这些程序根据任务整齐地组织成规则链。我计划在“zone_lan_forward”的开头为我的 OpenVPN 子网定义一个链,该链处理本地连接。它大致如下:
iptables -N zone_lan_vpn
iptables -I zone_lan_forward -i tun+ -j zone_lan_vpn
接下来要做什么取决于你想对这些客户端应用什么样的限制。我有三个不同的 OpenVPN 实例(一个管理级和两个访客访问级),所以我进一步划分了它们。
管理 VPN 子网上的用户几乎被授予了所有访问权限,因此我实施了 DENY->ALLOW 设置,该设置仅禁止菜单之外的特定地址,然后再接受其他所有地址。访客仅被允许访问某些资源,因此他们处于 ALLOW->DENY 设置中。
我对 DD-WRT 不太确定的部分是如何将其设置为在启动时自动发生。在 OpenWRT 中,防火墙规则是根据 中的脚本(不应干预)生成的/lib/firewall
。配置文件/etc/config/firewall
包含以下几行:
config 'include'
option 'path' '/etc/firewall.user'
每当重新加载防火墙规则时,都会将上面定义的文件/etc/firewall.user
读取为 BASH 脚本,以便允许用户进行特定调整。我对 DD-WRT 不太熟悉,因此我不确定是否使用了相同的防火墙设置方法。
如果您的防火墙规则是 DD-WRT 默认规则,您能否iptables -nvL --line-numbers
在 pastebin 或类似网站上发布输出,并删除您的公共地址?这将有助于我更好地了解 DD-WRT 的具体布局。您能否确认远程客户端获取的 OpenVPN 子网上的 IP 地址?您还可以发布路由器的路由表,如结果所示route -n
?(执行此操作时,请确保 OpenVPN 服务器正在运行)。如果您从中删除网络地址,请确定范围的用途(例如本地子网、VPN 子网、公共)。
当然,如果在 Web 界面中有定义此访问的选项,那么这一切都将毫无意义。路由器的 Web 控制台中是否有选项可以过滤 OpenVPN 子网上的用户?
恐怕我不太明白你问题的第二部分。你只希望某些 IP 地址能够通过 OpenVPN 连接到设备吗?你希望这项服务将来在 DD-WRT 路由器以外的服务器上运行吗?