關於部落格
  • 18558

    累積人氣

  • 0

    今日人氣

    0

    訂閱人氣

DD-WRT 利用 PPTP 與 EoIP 來 Bridge 兩個子網路

可能的方向與想法: 將兩端的 private subnet 連在一起有非常多的方式, 第一個抉擇在於分享器對外的 IP 是否是固定的。如果不是固定的, 那就需要使用 Dynamic DNS 輔助兩邊能自動連起來, 連起來的方式也很多, 在 DD-WRT 主要有 OpenVPN 或 PPTP 可以選擇。 而網路連接起來的最終型態, 與使用上會有些差異。主要可以選擇使用 bridge 跟 static route 的方式, 但有幾個不同的地方, 最主要的差異就是連接在一起後, bridge 會是同一個子網 (如: 10.0.0.0/24), 而 static route 則是不同的子網 (如: 一個子網是 10.0.0.0/24, 另一個是 10.0.1.0/24)。另外, 使用 bridge 可以讓 Samba/uPnP/DLNA 這類 Broadcast/Multicast 需求的程式直接運作, 但用 static route 方式就不行 (做不到或者還需要另外裝 relay 用的軟體)。所以, 最後先來試試看用 bridge 的方式。 使用 bridge 的方式在 DD-WRT 有兩個選擇, 使用 OpenVPN + tap interface 或是使用 PPTP + EoIP。如果使用 OpenVPN 中的 tap 方式, 可以直接 bridge 想要的網路, 但對於分享器的韌體容量太小的, 就塞不下 OpenVPN 而無法採用這種方式。另外, 使用 PPTP 就無法直接 bridge 網路, 必須要搭配 DD-WRT 內建的 EoIP 來 bridge 所需的網路。 不幸, 我的其中一部分享器就沒有 OpenVPN =.= ... 所以 ......... 另外, 使用 bridge 時, 若兩側網路都有 DHCP Server, 有可能會遇到 DHCP Client 取得另外一邊的 IP, 最主要的影響在於直接連 internet 的 gateway 會是另外一邊的, 造成繞到另外一邊才連到 internet, 浪費頻寬, 必須利用 layer 2 filter 過濾。 其實, 無論使用 OpenVPN 需要大量加解密運算的方式, 抑或是 PPTP + EoIP 的疊床架屋的方式, 對於分享器而言, 都會增加某程度的負擔, 預期傳輸效率將會減低。 如果希望減少效率的損失, PPTP + Static Route 應該是損失最少的方式。 作法: (測試環境 DD-WRT 版本: v24-sp2) 我們就利用 PPTP 與 EoIP 來 bridge 兩個子網路囉 ... 1. Dynamic DNS 設定 因為都是 Dynamic IP, 所以為 PPTP server 那端設定一組 Dynamic DNS (如: xxx.no-ip.org), 這樣可以方便 client 端容易連到 server 2.PPTP Server/Client 設定 假設 Subnet A 分享器內部 IP 為 10.0.0.254, 並作為 PPTP Server 假設 Subnet B 分享器內部 IP 為 10.0.0.154, 並作為 PPTP Client A 的 PPTP Server 設定, Server IP 請設定其他子網的 IP (如 10.0.1.1) B 的 PPTP Client 設定, Remote Subnet 請設定 PPTP Server IP 的子網 (如 10.0.1.0), 另外, Server IP 設定為 Dynamic DNS 的 hostname (如: xxx.no-ip.org) ... PPTP Server 的 Broadcasting 關閉, PPTP Client 的 NAT 也關閉 ... PS: 因為 DD-WRT 的 PPTP Server/Client 如果都在同一子網, 連線時, 機器會混亂。 剩下相關設定設好後, 需要使用 Reboot Router 或 重開電源, 然後做測試連線。 可以使用 telnet 連進去分享器 ping 對方 (10.0.1.1 與 10.0.0.154) 看有沒有通。 3.EoIP Tunnel 設定 A 分享器設定為 10.0.0.154 B 分享器設定為 10.0.1.1 另外, A 與 B 的 EoIP 序號必須要相同, 並都啟動 Bridging 功能。 設定完後, 需要使用 Reboot Router 或 重開電源。 如果沒有額外狀況, 兩個子網的裝置就可以直接互連了 ... 4.DHCP Traffic 的 Filter 設定 (應該只需要其中一邊設定即可) 避免 DHCP Client 取到另外一個 Subnet 的 IP (設定到錯的 internet gateway), 所以在其中一部分享器的 Startup Command 加上下面資料 ... (Ref: site-to-site dhcp and nat) ... 主要是將缺少的程式庫裝載上去, 並設定 filter ... echo "begin-base64 644 -" > /tmp/ebt_ip.o.gz.u64 echo "H4sIADwAAAACA5VWz28bVRD+dteON20KG9eq3BJUB21UVy1m2+RQRCO5cX5w" >> /tmp/ebt_ip.o.gz.u64 echo "yMGHHpAQcr32Eq9wHMveIFAPNSkHDq7wIb1H5R+p0gpx7J8QtaH8EBfuSGbm" >> /tmp/ebt_ip.o.gz.u64 echo "vbdh8whEHelp9ps3883Mm/ecPFhZXzUMA7EYsPEPAv5Ikc1BdUGgIt7CWSQl" >> /tmp/ebt_ip.o.gz.u64 echo "i5ejFJY8B2VntjrAecIFPByyLUM2B4cjA43RGDveN6g4HJMD7CxeH9nvo5KT" >> /tmp/ebt_ip.o.gz.u64 echo "XK9HNva9KsUxPo/fiKvyyMZ7N5hrmrgmVUxHcV0hrmm8OrK3FBfbJmC6FnyK" >> /tmp/ebt_ip.o.gz.u64 echo "M92P4At7AUuPBsRZwHMPWBq+TXUOHBN5DJzZsg8T5uM8DnfHqHi4ZMHMmpjL" >> /tmp/ebt_ip.o.gz.u64 echo "+7hWaCKNQW62CFzCy91rTgUW1VSg2gykXdZpwgae3FpDWeRap9oc6qeCPYH5" >> /tmp/ebt_ip.o.gz.u64 echo "+6LqDZQnd0qeCyqPqWI4D5+vQzXHua6rXBvqTIsqlzzffS9LfiZpORc+y8Oh" >> /tmp/ebt_ip.o.gz.u64 echo "oWYD/Dycgj90nWXqaUXkuE887B/bc1gRfGzL8YwdiBmniIf5TMU1hV+GjohZ" >> /tmp/ebt_ip.o.gz.u64 echo "QwbLgsvGgcX+sd1K2A2aCe/xtzybH76fIdsNmtPv47Rr49muTfh9NbcU9kXd" >> /tmp/ebt_ip.o.gz.u64 echo "V1W/WboLT8lvjIee6wR0ZtLOtbnOipgN4x8pBfN58L0zYl47Xh73HLbpdyR7" >> /tmp/ebt_ip.o.gz.u64 echo "dEd21N1l31e78bwpXtTmqP14RjnyUXMS+2yXve9x5beBi7Q+vGKjQL1+655s" >> /tmp/ebt_ip.o.gz.u64 echo "Oy5hF6fKx+a/bX9l8ARvIO/SuvwfXMn9gvX/+wun7LfDRtDpB4tr1XV8EfQ6" >> /tmp/ebt_ip.o.gz.u64 echo "Qbv2ZdDrh1udxZulhdK8x86l/tebUd0nHfWkbsVfvaBdioKvIvnVrEd1lPx+" >> /tmp/ebt_ip.o.gz.u64 echo "n+FG2Pl8S9q7zR5Km83A394o1f1w/iahrabYfwO5LN4aMKFwmVY10Z96wHiH" >> /tmp/ebt_ip.o.gz.u64 echo "1mQi7hMb4LFNqfiUuOvAVYVjipElOXW+OY3vJwrOKz4rwfeB0jHfC+3sY74F" >> /tmp/ebt_ip.o.gz.u64 echo "2UPXTPjlE37Mx/iOqi+WX8lvoPmxLGr1Hdj8VmR9mUR9qxpfK3W8vnjvrvo2" >> /tmp/ebt_ip.o.gz.u64 echo "E37uCXmnE72y0B8XfHYCX5KLZYaKOiB9TtWdUmczqfHRm8GnJ/DpYhyr7c9x" >> /tmp/ebt_ip.o.gz.u64 echo "cs/SoixYGk5reFLDZzQ8oeGM8OB3mBO/fwb99sh3F+M57Q7Ma3hVvyOBH9XC" >> /tmp/ebt_ip.o.gz.u64 echo "bqmBsBNGNXop2+0AjXZQ72x3Y1irRa2wHyOO4BfXj4JebbMeNVrCtN3RjOLu" >> /tmp/ebt_ip.o.gz.u64 echo "pUx5j1jPGFJ/p/QLpfdMqelHGGm6SEXSE1OyzzQtjzGtW4xpkLcZn5N98/6y" >> /tmp/ebt_ip.o.gz.u64 echo "2i/y7InnutKc31T/qjAuKF1W+p7SfwMbOFhxAAkAAA==" >> /tmp/ebt_ip.o.gz.u64 echo "====" >> /tmp/ebt_ip.o.gz.u64 uudecode /tmp/ebt_ip.o.gz.u64 | gunzip -cd > /tmp/ebt_ip.o sleep 15 ; insmod ebtables ; insmod ebtable_filter ; insmod /tmp/ebt_ip.o & sleep 25 ; ebtables -I INPUT -i oet1 -p IPv4 --ip-protocol udp --ip-destination-port 67:68 -j DROP & sleep 5 ; ebtables -I OUTPUT -o oet1 -p IPv4 --ip-protocol udp --ip-destination-port 67:68 -j DROP & PS: 如果臨時要 PPTP Client 連線的話 ... 請 telnet 進入分享器之後, 執行: cd /tmp/pptpd_client ; vpn start(stop) PS: 本篇只是怕我忘了 ~ 但還是無聊地畫了一張圖 :P ~~~
相簿設定
標籤設定
相簿狀態