OpenVPN 和 DD-WRT

OpenVPN 和 DD-WRT

我正在嘗試設定一個新的 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 ​​教程(它們都假設您使用另一種類型的配置,而我無法使用)。因此我的問題分為兩部分:

  1. 有人可以指導我以可編寫腳本的方式設定 iptables(或從 wifi 網路設備發送流量的任何內容),以便我可以執行 iptables 腳本,然後在路由器上啟動 OpenVPN。

  2. 如何變更此設定以僅在 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。想要將您的裝置用作路由器的人會遇到類似以下情況。

  1. 接受已建立的連線。
  2. 接受與您現有的任何連接埠轉送規則相對應的互聯網到本機位址的連線。
  3. 接受來自本地子網路的流量。
  4. 丟棄/拒絕所有剩餘的跨越規則鏈的嘗試。

如果您的 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 子網路上的使用者被授予訪問幾乎所有內容的權限,因此我實施了「拒絕」->「允許」設置,在接受其他所有內容之前,僅禁止不在選單中的特定位址。訪客僅被允許存取某些資源,因此他們處於允許->拒絕設定。

我對 DD-WRT 不確定的部分是如何將其設定為在啟動時自動發生。在 OpenWRT 中,防火牆規則是基於/lib/firewall.設定檔/etc/config/firewall包含以下行:

config 'include'

option 'path' '/etc/firewall.user'

每當重新載入防火牆規則時,上面定義的檔案/etc/firewall.user都會被讀取為 BASH 腳本,以便允許使用者特定的調整。我對 DD-WRT 不太熟悉,所以我不確定是否使用相同的防火牆設定方法。

如果您的防火牆規則採用 DD-WRT 預設規則,您能否在 Pastebin 或類似內容上發布輸出iptables -nvL --line-numbers,並編輯您的公用位址?這將幫助我更了解DD-WRT的具體佈局。您能否確認遠端客戶端所取得的 OpenVPN 子網路上的 IP 位址?您能否也發佈您的路由器的路由表,如結果所示route -n? (執行此操作時請確保 OpenVPN 伺服器正在執行)。如果您從中編輯網路位址,請確定該範圍的用途(例如本機子網路、VPN 子網路、公用子網路)。

當然,如果有在 Web 介面中定義此存取權限的選項,那麼這一切都可能毫無意義。路由器的 Web 控制台中是否有一個選項可以過濾 OpenVPN 子網路上的使用者?

恐怕我不太明白你問題的第二部分。您是否只希望某些 IP 位址能夠透過 OpenVPN 連接到裝置?您希望將來此服務位於 DD-WRT 路由器以外的伺服器上嗎?

相關內容