« PuTTY - SSH 連線應用備忘 | 首頁 | NCLP 考試心得 »

2006年10月16日

PPTP VPN 實作

Step 1: 安裝 PPTPD & PPP_MPPE encryption module

環境需求

kernel 2.4.x

依序下載並安裝下列套件:

kernel 2.6.5 ~ 2.6.13

MPPE/MPPC kernel module for Linux 下載對應版本的 kernel patch

上好 patch 後, 依下述方式安裝 PPP MPPE 模組

kernel 2.6.15 (含)以上

cd /usr/src/linux

make menuconfig

Device Drivers -> Network device support -> PPP MPPE compression (M)

make modules

make modules_install

下載並安裝下列套件:

Step 2: 修改相關設定檔

vi /etc/rc.d/rc.local

#開機自動載入 ppp_mppe 模組, 並啟動 pptpd
modprobe ppp-compress-18
/etc/init.d/pptpd start

vi /etc/modules.conf

alias net-pf-47 ip_gre

vi /etc/pptpd.conf

localip 192.168.1.1 #pptpd host 的內部 IP
remoteip 192.168.1.10-19 #pptp client 可被分配的 IP 範圍

vi /etc/ppp/options.pptpd

name pptpd.mydomain.com #pptpd hostname
require-mschap-v2
require-mppe-128
ms-dns 192.168.1.1 #指向內部的 DNS Server
ms-wins 192.168.1.2 #指向內部的 WINS Server
logfile /var/log/ppp/pptpd.log

vi /etc/ppp/chap-secrets

"user_name" "pptpd_hostname" "password" "allowed-source-ip"

第二個欄位可為 *, 表示自動識別 pptpd hostname

第四個欄位可為 *, 表示不限制 pptp client 的來源 IP

vi /etc/sysctl.conf

net.ipv4.ip_forward = 1 #啟用 IP 轉送

Step 3: 開放防火牆

iptables -A INPUT -p gre -j ACCEPT

iptables -A INPUT -p tcp --dport 1723 -j ACCEPT

Step 4: 立即啟用 PPTPD

echo 1 > /proc/sys/net/ipv4/ip_forward

modprobe ppp-compress-18

/etc/init.d/pptpd start

從 Windows XP 建立 PPTP 連線

檔案總管 → 網路上的芳鄰 (右鍵) → 內容 → 新增連線精靈

連線到我工作的地方的網路 → 虛擬私人網路連線

公司名稱: (隨意)

(勾選) 不要撥接起始連線

主機名稱或 IP 位址: pptpd.host.name

連線時, 使用者名稱與密碼將參照 chap-secrets 裡面的設定

如不想在連線後自動變更 Default Gateway, 於 PPTP 連線 Icon 上按右鍵, 點選「網路功能」→「Internet Protocol (TCP/IP)」→「內容」→「進階」→ 取消勾選「使用遠端網路的預設閘道」即可

從 Linux X Desktop 建立 PPTP 連線

以 SuSE Linux KDE Desktop 為例:

yast

安裝 libglade、libxml

w3m http://sourceforge.net/project/showfiles.php?group_id=33063

下載並安裝 pptp、pptpconfig、php4-pcntl-gtk、php4-pcntl

以一般使用者登入 KDE 桌面, 啟動 Konsole

PATH=$PATH:/usr/sbin:/sbin

sudo pptpconfig

依 pptpconfig 畫面提示填入 PPTP 連線設定即可


參考資料:

延伸閱讀:


--- 2009-07-13 補充: 在 Fedora 11 安裝 pptpd

rpm -Uvh http://poptop.sourceforge.net/yum/stable/fc11/pptp-release-current.noarch.rpm

yum install pptpd

vi /etc/rc.d/rc.local

#開機自動載入 ppp_mppe 模組, 並啟動 pptpd
modprobe ppp-compress-18
/etc/init.d/pptpd start

vi /etc/modprobe.conf

alias net-pf-47 ip_gre

vi /etc/pptpd.conf

localip 192.168.1.1 #pptpd host 的內部 IP
remoteip 192.168.1.10-19 #pptp client 可被分配的 IP 範圍

vi /etc/ppp/options.pptpd

name pptpd.mydomain.com #pptpd hostname
require-mschap-v2
require-mppe-128
ms-dns 192.168.1.1 #指向內部的 DNS Server
ms-wins 192.168.1.2 #指向內部的 WINS Server

vi /etc/ppp/chap-secrets

"user_name" "pptpd_hostname" "password" "allowed-source-ip"

第二個欄位可為 *, 表示自動識別 pptpd hostname

第四個欄位可為 *, 表示不限制 pptp client 的來源 IP

vi /etc/sysctl.conf

net.ipv4.ip_forward = 1 #啟用 IP 轉送

iptables -A INPUT -p gre -j ACCEPT

iptables -A INPUT -p tcp --dport 1723 -j ACCEPT

iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j MASQUERADE

/etc/init.d/iptables save

立即啟用 pptpd

sysctl -p

modprobe ppp-compress-18

/etc/init.d/pptpd start

ps. Fedora 7 可降級安裝 libpcap 0.9.4 以解決 nat 問題, 感謝網友 David M. 來信分享。

Posted by Jamyy at 2006年10月16日 15:00

Trackback Pings

TrackBack URL for this entry:
http://cha.homeip.net/cgi-bin/mt/mt-tb.cgi/234

Comments

很喜欢你的blog的字体配色,需要在后台设置吧?

呵呵

Posted by: aldds at 2006年10月17日 10:46

^_^ 謝謝~

這個 blog 是採用 "MovableType" blog 出版系統所架構的
它的後台很單純, 只是把 style sheet 內容儲存起來而已
style sheet 的內容在: http://cha.homeip.net/blog/styles-site.css

而文章內容 (包括內容的版面和配色) 是用 Frontpage 編輯的
出版的時候, 直接把 HTML 內容複製到後台編輯介面裡
就成了上面的樣子了 :P

Posted by: jamyy at 2006年10月17日 11:48

呵呵,谢谢解答:D

Posted by: aldds at 2006年10月17日 16:53

請教一下~
因為在rpmfind.net裡找不到rhel4_x86_64版ppp-2.4.3-5,
那麼假如我使用rhel3_x86_64的ppp-2.4.3-5會不會有所影響呢?

Posted by: casper at 2006年11月05日 15:47

也許 ppp-2.4.3-5 沒有出 for rhel4 x86_64 的 rpm 封裝吧
基本上同一系列不同版次的 rpm 檔是可以通用的, 安裝時只要符合套件相依性即可

Posted by: Jamyy at 2006年11月05日 17:14

你好,我覺得這篇文章不錯,我可以張貼在自己網站收集版嗎?

Posted by: wugi at 2006年11月21日 13:38

可以的, 謝謝您~ ^_^

Posted by: Jamyy at 2006年11月21日 13:53

請問您的PPTP throughput是多少?
我所使用的PPTPD(Poptop pptpd)
一樣是使用MPPE
但是用winXP撥上, throughput實在很糟糕^^||
所以想請問你一下

3Q

Posted by: mix at 2006年11月22日 15:15

PPTP 連線後, Default Gateway 預設會變成 pptpd host 的 LAN IP
這樣一來, 傳輸速度就會受限於本地到 pptpd host 之間的頻寬
您可以試著取消勾選「使用遠端網路的預設閘道」
這樣就不會影響上網速度

我從 台灣固網 ADSL 2M/256 用 WinXP PPTP 連入 中華電信 FTTB 2M 雙向, Default Gateway 以 pptpd host 的 LAN IP 上網傳輸, 下載速度仍然可達每秒二百多 KBytes :)

Posted by: Jamyy at 2006年11月22日 21:37

Hi Jamyy
我是在公司內網裡面對某一部router裡的PPTP server做連線測試, 我猜也許是PPTPD的關係(我用的是linux的Poptop pptpd)
因為我對內網的另一部window 2000 PPTP server做連線, 速度超快(一樣在公司內網點對點作測試)

想請問你知道你用的PPTPD是什麼名稱與版本嗎?
感謝~

Posted by: mix at 2006年11月22日 22:11

哈..不好意思, 看到版本了
你也是使用Poptop pptpd

Posted by: mix at 2006年11月22日 22:20

Jamyy 前輩您好:
小弟是使用FC5並且參考您的文章,是做架設VPN,
不過在核心編譯的部份,卻無法正常執行,不知是否跟我的
2.6.18-1.2257.fc5smp 有關係??
能否請您在空閒之虞,給予小弟相關的建議??
不過還是感激您,寫了這一篇文章給許多人作為參考。

Posted by: Boday at 2007年01月14日 23:36

Boday 您好!
能否請您說明是在哪個步驟發生了什麼樣的錯誤?
如果是核心編譯的問題, 您也可以參考這篇:
/blog/archives/2006/11/how_to_compile.html
FC5 可使用 yum 安裝 ppp 與 pptp:
yum install ppp pptp
謝謝您的支持, 能和大家分享自己的小小心得真的很開心

Posted by: Jamyy at 2007年01月15日 13:33

Dear Jamyy
感激您的指導,FC5在Kernel的部分我經由您的文件查看出
預設值已經PPP MPPE compression (M)了。

目前連線部分也可以正常連線了,不過還有一件事請教。
我的網路配置如下
eth0 為對外IP
eth1 為對內IP 192.168.0.X
目前架好後又多了ppp0的部份
ppp0 為VPN的 localip
我想請教的是 ppp0 是否可以與 eth1 同依網域呢??

非常感激您在百忙之中還撥空答覆我,萬分感激您。

Posted by: Boday at 2007年01月16日 01:05

Boday 您好!
很高興你已經成功實現 PPTP 的運作
不過我看不懂您的意思
ppp0 成立後本來就和內部網路同一網域

我在網路上找了 PPTP 的定義:
一種由微軟提出經 IETF 通過的第二層通訊協定, PPTP 透通功能讓遠端PC 建立一個經由路由器一直到Windows NT RRAS (Routing and Remote Access Service) 伺服器的加密通道, 以取得區域網路上的資源. 而思科將 L2F 與微軟的 PPTP 合併規格成為 L2TP.
資料來源: http://www.euca.net/forums/showthread.php?t=189

也許對您有幫助 :)

Posted by: Jamyy at 2007年01月16日 18:25

Dear Jamyy
感激您再次提供文件,正是小弟需要的,謝謝喔!!
我那台主機的VPN再次的跟您做一次答謝,因為PHP5的關係,所以我才需要把FC3改成FC5,不懂之處,非常感激您的大力幫忙,目前我才能把系統拋一旁,專心的專研程式囉!! ^O^
對了,關於您的文章
vi /etc/rc.d/rc.local
/etc/init.d/pptpd start
小弟是使用
/sbin/chkconfig pptpd on
下去做開機立即啟動的,或許這也是個不錯的方式(用Setup可以輕鬆做開關啦!!),小弟也在此提供給您參考唷!!
再次謝謝您啦,大恩大德沒齒難忘!!

Posted by: Boday at 2007年01月16日 19:42

原來 FC5 已將 pptp 做進 chkconfig 了 :)
謝謝您的資訊
很高興能幫上忙
也祝福你 PHP 程式開發順利囉

Posted by: Jamyy at 2007年01月17日 19:01

請問怎樣可以不使用圖形化的pptpconfig 能直接使用pptp來進行VPN連接呢 我有看pptp的説明,沒有找到輸入user/pass的地方 不好意思 請指教

Posted by: Eric at 2007年01月28日 22:52

我也正想研究如何直接 pptp 連線, 不過最近比較忙, 一直沒能付諸行動 ^^'
帳號密碼不是在 /etc/ppp/chap-secrets 嗎?

Posted by: Jamyy at 2007年01月29日 12:22

您好!看到您的文章總是讓我受益良多。
有個VPN Client (Linux Client端)問題想請教一下,
我Server端也是用Linux + PPTPD去架設VPN Server,
如果我用Windows XP透過PPTP去連線,一切都正常。
當我電腦換成Linux + PPTP Client去連線,變成只能ping的到VPN Server內網IP,
要去找其他內部電腦則無法連線,也ping不到,請問我還有什麼地方要設定嗎?
(用WinXP就一切都正常)
先感謝您抽空解答迷惑,謝謝您。

Posted by: Dennis at 2007年02月03日 23:04

您好!不好意思,我已經找到問題點了。原來Linux Client端還要自己加route上去就可以了。不過WinXP可以自己抓到Routing,真是自動多了。 ^^"

Posted by: Dennis at 2007年02月04日 21:51

Dennis 您好~ 不好意思這麼晚才回您的留言.. ^^'

如果您是用 pptpconfig 連線的話, 也可以點選 "Routing" 進行設定:
1. 選用 "Client to LAN", 再點選 "Edit Network Routes...", 設定對方的 network 即可 (如: 192.168.1.0/24)
連線後 route -n 就能看到 192.168.1.0/24 的 interface 是 ppp0
2. 也可以選用 "All to Tunnel", 就相當於 Windows 的 "使用遠端網路的預設閘道"

以上設定完畢後記得按 "Update"

Posted by: Jamyy at 2007年02月05日 10:18

謝謝您提供的資訊,讓我對PPTP Client更了解其設定方式。
今天試過了,果然可以 ^^

Posted by: Dennis at 2007年02月05日 20:54

先謝謝您詳細的步驟,我都建好也連得上線了,
但有個問題不知道有沒有人遇過?
就是在Windows連上pptp vpn後,透過vpn的nat上網,
好像只要是ping不到的網站(icmp reply關閉)就連上?
不知是否pptp+nat要連網站會先做icmp test呢?
找不到參數可以設定, POPTOP的FAQ也沒提到這個,
有人遇到這種問題嗎?

Posted by: EarlyCAT at 2007年03月28日 17:09

Sorry, 我找到問題了.
是 iptables 的問題,跟 ppp 無關, 抱歉.

Posted by: EarlyCAT at 2007年03月28日 17:41

不好意思, 您的 Step 3中的 Firewall 設定,
iptables -A INPUT -p tcp -m multiport --dports 47,1723 -j ACCEPT


其中的 47 應該是 protocol 47 (gre) 而不是 tcp port 47
應改為:
iptables -A INPUT -p gre -j ACCEPT

請見:
http://poptop.sourceforge.net/dox/gre-protocol-unavailable.phtml

Posted by: EarlyCAT at 2007年04月05日 11:53

sorry, 我又沒看詳細...
您 iptables 中有做 gre 設定.
但不解為何 tcp port 47 也要打開?

Posted by: EarlyCAT at 2007年04月05日 11:59

不好意思, 其實是我弄錯了
tcp port 47 是不需要的
感謝您的指點 :)

Posted by: Jamyy at 2007年04月05日 20:09

站長您好,想請問一下,如果環境是client 經過ip 分享器或nat 連到遠方nat 再導到內部的vpn 去,是否只有一台可以連,client 其它電腦就不能連線了,不知站長是否有碰過這樣的情況?

Posted by: ken at 2007年04月22日 22:07

您好
我並沒有遇過您所描述的情況
建議檢查 /etc/pptpd.conf 的 remoteip 是否分配足夠 IP
或 tail -f /var/log/messages 檢視錯誤訊息

Posted by: Jamyy at 2007年04月23日 14:55

如果不使用 pptpd
而使用 pptp and pppd 來 run pptp.
有這種機制吧 ?!

Posted by: Thinkthrough at 2007年05月04日 17:32

據我所知 pppd 是無法當 pptp server 的
linux pptp server 除了 poptop (pptpd) 之外
也可以試試 wm pptp daemon (wmpptpd)

Posted by: Jamyy at 2007年05月04日 23:23

站長請教一下,小弟試了一下,就是用client端取得ip 是192.168.0.100,而default gateway 也是192.168.0.100,而我的.0網段的gateway 應該是192.168.0.254才是,這樣是正確的嗎?

Posted by: ken at 2007年05月07日 18:35

沒錯, ipconfig 查出 default gateway 是自己取得的 IP
用 tracert 測試一下就會發現其實還是會走 192.168.0.254 這個 IP 出去的

Posted by: Jamyy at 2007年05月08日 14:25

小弟有數點疑惑,希望前輩您能幫我解惑
使用的裝置為
本機電腦 IP:192.168.79.1
本機上的VMware Fedora 6 IP:192.168.79.128

vi /etc/pptpd.conf

localip 192.168.1.1 #pptpd host 的內部 IP

在上面的localip是指VPN連線建立後所產生的虛擬LAN網段的IP
還是原來VPN Server在實體網路中的IP位置
又如果是虛擬LAN網段的IP, 那是否有什麼設定規則?
亦或是可自行設定

remoteip 192.168.1.10-19 #pptp client 可被分配的 IP 範圍
這個問題與上個類似, 被分配給Client的IP範圍, 是直接用VPN server所分配的虛擬網段還是Server端實體網路中未被分配的IP

vi /etc/ppp/options.pptpd

ms-dns 192.168.1.1 #指向內部的 DNS Server
ms-wins 192.168.1.2 #指向內部的 WINS Server
請問這兩個DNS的設定如果不設會有什麼影響嗎?
因為小弟是用本機連本機上的VMware練習, 不知道DNS該怎麼設
又如果在實機時, 這兩個DNS是設定成Server端網路的DNS還是
Client網路的DNS?

Posted by: mone at 2007年05月09日 12:24

站長您好,小弟又試了一下,就是client 透過nat連遠端的vpn server,nat後的第一台電腦連線是正常,第2台就不行了,錯誤訊息如下,不知是否如之前小弟說的,在nat 後只可有一台連線。

May 9 14:23:00 auuount pppd[4405]: Connect: ppp1 /dev/pts/3
May 9 14:23:00 auuount pppd[4405]: tcflush failed: Bad file descriptor
May 9 14:23:00 auuount pppd[4405]: tcsetattr: Invalid argument (line 1016)
May 9 14:23:00 auuount pppd[4405]: Exit.
May 9 14:23:00 auuount pptpd[4404]: GRE: read(fd=6,buffer=804e5a0,len=8196) from PTY failed: status = -1 error = Input/output error, usually caused by unexpected termination of pppd, check option syntax and pppd logs
May 9 14:23:00 auuount pptpd[4404]: CTRL: PTY read or GRE write failed (pty,gre)=(6,7)

Posted by: ken at 2007年05月09日 14:37

1. localip 就是 pptp server 的 lan 端 ip. 這裡強調 lan 端 ip 是因為當 linux server 有兩張網卡, 一張對外 (public ip) 一張對內 (lan ip) 時的狀況. 而以您的單張網卡環境來說, 就是 fedora core 6 的 ip, 也就是 192.168.79.128

2. remoteip 和 localip 屬於同一網段. remoteip 可以想像成: 當 pptp client 以 pptp 連線到 pptp server 構連 vpn 時, pptp server 可分配給它的內部 ip.

3. 至少要設 dns. 其實您可以把 pptp server 想像成 dhcp server, 它會自動分配 ip (remoteip) 給 pptp client, 同時也會給 dns (ms-dns) 與 wins (ms-wins) 的值. 如果內部網路沒有 dns server, ms-dns 可設定外部 dns 的 ip, 如中華電信的: 168.95.1.1; 如果內部網路沒有 wins server, ms-wins 參數就可以省略.

4. 關於第二台不能連線的問題我還要再研究看看

Posted by: Jamyy at 2007年05月10日 09:30

Connection terminated.
Connect time 0.1 minutes.
Sent 126 bytes, received 363 bytes.
Plugin /usr/lib/pptpd/pptpd-logwtmp.so loaded.
Using interface ppp0
Connect: ppp0 /dev/pts/5
Modem hangup
Connection terminated.
MPPE disabled
^^^^^^^^^^^^^
請問各位先進...我的XP VPN一旦通過認證後就斷線 ..查了log發現 MPPE disabled. 請我有那邊設定忽略了嘛

Posted by: AL at 2007年05月10日 16:20

站長請教一下,
我用client to vpn server 在同一個網域可連
但在clinet -->router-->vpn server就不通了,但route上的1732port我有開(router的虛擬伺服也有指到vpn server),是否那邊沒設好

Posted by: alf at 2007年05月18日 15:47

pptp server 在 nat 之後的問題似乎不少
ken 兄 "只能連入一台電腦" 的問題也許也是這種情況
不曉得是不是要載入這些模組...?
pptp-conntrack-nat
ip_conntrack_proto_gre
ip_nat_proto_gre
ip_nat_pptp

Posted by: Jamyy at 2007年05月18日 16:34

你好,請問一下,如何不用圖形化介面,來使ppp來連線呢?我是用fc6,謝謝哦

Posted by: pony at 2007年07月18日 17:06

您好
請參考這篇:
http://www.cyberciti.biz/tips/howto-configure-ubuntu-fedora-linux-pptp-client.html

Posted by: Jamyy at 2007年07月18日 21:38

你好:
我的環境如下
Windows xp PC1(VPN-Clinet)
ip:192.168.1.21/24
vpn_ip:192.168.123.98
Linux FC6 PC1(VPN-Server)
WAN:192.168.1.32/24
LAN:192.168.123.254
Windows xp PC2
ip:192.168.123.253/24

我用你上面方法都成功的連線了
但是我用PC1 Ping PC2(ping 192.168.123.253)
無法成功....
我用PC2抓封包發現他有收到Ping的封包,但是要replay時卻無法送回到PC1
但是我用PC1 ping Linux-LAN(192.168.123.254)是可以成功的
所以就很納悶為什麼不行....
以下是我Linux ipconfig 的結果:
eth0 Link encap:Ethernet HWaddr 00:05:5D:F4:49:75
inet addr:192.168.123.254 Bcast:192.168.123.255 Mask:255.255.255.0
inet6 addr: fe80::205:5dff:fef4:4975/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:7790 errors:0 dropped:0 overruns:0 frame:0
TX packets:7718 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:1772726 (1.6 MiB) TX bytes:4908207 (4.6 MiB)
Interrupt:9 Base address:0x8000

eth1 Link encap:Ethernet HWaddr 00:50:BA:1A:25:FD
inet addr:192.168.1.32 Bcast:192.168.1.255 Mask:255.255.255.0
inet6 addr: fe80::250:baff:fe1a:25fd/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:33139 errors:0 dropped:0 overruns:0 frame:0
TX packets:30536 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:8376204 (7.9 MiB) TX bytes:6782904 (6.4 MiB)
Interrupt:9 Base address:0xa000

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:1997 errors:0 dropped:0 overruns:0 frame:0
TX packets:1997 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:5809194 (5.5 MiB) TX bytes:5809194 (5.5 MiB)

ppp0 Link encap:Point-to-Point Protocol
inet addr:192.168.123.254 P-t-P:192.168.123.98 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1396 Metric:1
RX packets:107 errors:0 dropped:0 overruns:0 frame:0
TX packets:49 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:3
RX bytes:10053 (9.8 KiB) TX bytes:6048 (5.9 KiB)

所以請教一下是否我有哪邊設定有問題,謝謝~~~

Posted by: jackie at 2007年07月19日 10:29

不好意思,忘了寫上GW
PC1 GW 192.168.1.1
Linux Default gw 192.168.1.1
PC2 GW 192.168.123.254

Posted by: jackie at 2007年07月19日 10:32

預設情況下, PC1 連入 PPTP 後, Default GW 應該會是自己取得的 VPN IP (192.168.123.98)
ping 無回應, 很有可能是 XP SP2 防火牆裡的設定沒有打開
(在防火牆進階選項裡, 勾選 ICMP 的 "允許連入回應要求")
除了 ping 之外, 有沒有試過能否 telnet 連入對方某個 port 呢?

Posted by: Jamyy at 2007年07月19日 11:03

我找到原因了
因為我發現是PC2發ARP要問192.168.123.98的MAC時,卻沒有收到回應
理論上Linux 的LAN應該要回給他LAN的MAC讓他送到Linux PC來處理
所以我找到/etc/ppp/options.pptpd 裡面有個proxyarp要打開
這樣Linux的LAN就會回應LAN的MAC這樣就通了
^_^

Posted by: jackie at 2007年07月19日 14:14

我找到原因了
因為option.pptpd 裡面的proxyarp沒有打開
^_^

Posted by: jackie at 2007年07月19日 14:15

原來如此, 謝謝您的分享 :)

Posted by: Jamyy at 2007年07月19日 16:17

大哥您好,我這裡拜讀大作,但vpn似乎沒有啟動成功,不知是否可以幫我分析一下、提點哪裡沒有設定好或需要調整;感謝大哥:
1.
系統:
fedora7;網卡兩張。
LAN:10.0.0.1
WAN:192.168.0.1

設定:
我依照鳥哥的NAT script + 大哥的vpn設定
http://linux.vbird.org/linux_server/0250simple_firewall.php#iptables.rule

2.
client連線:
我用webmin的pptp vpn client連線

錯誤訊息:
anon warn[open_inetsock:pptp_callmgr.c:326]: connect: No route to host
anon fatal[callmgr_main:pptp_callmgr.c:124]: Could not open control connection to 192.168.0.252
anon fatal[open_callmgr:pptp.c:439]: Call manager exited with error 256
anon fatal[main:pptp.c:319]: Child process died

Posted by: andy at 2007年07月28日 13:36

更正一下,我的對外wan ip是192.168.0.252

Posted by: andy at 2007年07月28日 13:56

andy 您好

有可能是因為 pptp server 沒有啟動, 或是網路問題所造成
您可以依照底下這個網頁所列的步驟, 逐一測出問題點:
http://pptpclient.sourceforge.net/howto-diagnosis.phtml#fault_tree

Posted by: Jamyy at 2007年07月29日 00:40

感謝大哥指導,應該發現問題了,應該是我的vpn沒有啟動成功;可以再請教一下大哥嗎...
兩張網卡架vpn是不是啟動成功要出現ppp0才是成功?
如果我沒有出現ppp0,需要從何著手呢?

感謝感謝

Posted by: andy at 2007年07月30日 10:46

ppp0 是指 "第一個 ppp 連線裝置"
依此類推, 一個以上的 ppp 連線就是 ppp1, ppp2...

ppp 裝置通常出現在下列幾種情況:
1. linux 本身以 "pppoe" 方式撥號上網
2. 當 pptp client 連入 pptp server, 也會出現

pptp client 是否和 pptp server 連線成功
最簡單的方式就是在 pptp client 執行 ifconfig 指令
查看是否出現 ppp0 這個裝置

(如果 pptp client 本身就是 pppoe 撥號上網的情況, 和 pptp server 的連線就是 ppp1)

順帶一提, linux 的 pppoe 撥號可參考鳥哥的網站:
http://tinyurl.com/379z8p

Posted by: Jamyy at 2007年07月30日 11:03

感謝大哥,了解了!
請問一下,當我查詢pptpd status顯示有執行,但telnet pptp 1723卻無法連線是否表示pptpd其實沒有成功啟動?(防火牆有關閉)

感謝

Posted by: andy at 2007年07月30日 11:42

pptp server:
除了查詢 pptpd status 之外
也可以執行 netstat -ntulp | grep pptpd
來查看 pptpd 是不是正在聆聽 1723 port
正常的情況下應該會是:
tcp 0 0 0.0.0.0:1723 0.0.0.0:* LISTEN xxxx/pptpd

pptp client:
可以用 telnet pptp.server.ip 1723 看能不能連入 pptp server 的 tcp 1723 port
最好是用 linux 的 telnet 來測, 若能成功連入 1723 port, 會出現:
Trying your.pptp.server.ip...
Connected to your.pptp.server.ip.
Escape character is '^]'

如果 server 端確定 pptp server 有執行, 也正在聆聽 tcp 1723 port
但 client 沒法連入 pptp server 的 1723 port 的話
1. 請再檢查 server 端的防火牆設置
2. 請確定 client 到 server 端的網路是通的

Posted by: Jamyy at 2007年07月30日 12:03

大哥午安,
小弟照您指示測試
pptp server (可上網)
netstat -ntulp | grep pptpd
tcp 0 0 0.0.0.0:1723 0.0.0.0:* LISTEN 5886/pptpd

pptp client (Linux 並可上網,與Server同網域ip)
telnet 192.168.0.252 1723
Trying 192.168.0.252...
Connected to 192.168.0.252.
Escape character is '^]'.
Connection closed by foreign host.
多了最後這行代表正常嗎?

防火牆開啟或關閉,測試結果如上
關閉防火牆來連線得到如下錯誤訊息:
Jul 30 12:07:58 cdn pppd[3625]: Connect: ppp0 /dev/pts/1
Jul 30 12:07:58 cdn pptp[3622]: anon log[pptp_read_some:pptp_ctrl.c:543]: read returned zero, peer has closed
Jul 30 12:07:58 cdn pptp[3622]: anon log[callmgr_main:pptp_callmgr.c:255]: Closing connection (shutdown)
Jul 30 12:07:58 cdn pptp[3622]: anon log[ctrlp_rep:pptp_ctrl.c:251]: Sent control packet type is 12 'Call-Clear-Request'
Jul 30 12:07:58 cdn pptp[3622]: anon log[pptp_read_some:pptp_ctrl.c:543]: read returned zero, peer has closed
Jul 30 12:07:58 cdn pptp[3622]: anon log[call_callback:pptp_callmgr.c:78]: Closing connection (call state)
Jul 30 12:07:58 cdn pppd[3625]: Hangup (SIGHUP)
Jul 30 12:07:58 cdn pppd[3625]: Modem hangup
Jul 30 12:07:58 cdn pppd[3625]: Connection terminated.
Jul 30 12:07:59 cdn pppd[3625]: Exit.


感謝大哥

Posted by: andy at 2007年07月30日 12:24

如果你是依照這篇 /etc/ppp/options.pptpd 設定的話
請將 pptp client, webmin "Edit PPTP Tunnel" 畫面中
"Enable MPPE encryption?" 設定為 "Must be used"

Posted by: Jamyy at 2007年07月30日 13:52

大哥您好
我的client
Enable MPPE encryption是設定為 "Must be used"

我再請教一下,我用的是Fedora7/kernel 2.6.22;有人說這版本不用再編譯核心,所以我依照您大作操作,除了核心部分我沒參照!還是我是這裡出錯了?

Posted by: andy at 2007年07月30日 14:12

Andy 您好

沒錯, kernel 2.6.22 已内建 MPPE 項目, 並不需要再動這部份

以下是我的 pptp server 配置, 經 Windows XP 測試是可以連線的:
OS: Fedora 7
ppp-2.4.3-6.2.1.i386.rpm
pptp-1.7.1-2.fc6.i386.rpm
pptpd-1.3.3-1.fc6.i386.rpm

以上套件請至 rpmfind.net 輸入 ppp、pptp、pptpd 搜尋
rpm 安裝參數: rpm -Uvh --nodeps --force

Posted by: Jamyy at 2007年07月30日 15:02

大哥您好,
我pptp server配置的版本跟大哥您的差不多(ppp是2.4.4-2)!那有可能是設定檔的問題了,可以再麻煩大哥幫小弟確認看看那裡有錯誤好嗎?
ppp-2.4.4-2.i386
pptp-1.7.1-2.fc6.i386
pptpd-1.3.3-1.fc6.i386

PPTP Server (fedora 7)
eth0 192.168.0.252 (對外ip)
eth1 10.0.0.1 (對內ip)
default gateway 192.168.0.254

PPP Client (linux)
eth0 192.168.0.33
連線(ip/帳號/密碼)透過webmin=>192.168.0.252/vpn/1234


以下是設定檔:
vi /etc/rd.d/rc.local
PATH=/sbin:/usr/sbin:/bin:/usr/bin; export PATH
/sbin/iptables -A INPUT -p gre -j ACCEPT
/sbin/iptables -A INPUT -p tcp --dport 1723 -j ACCEPT
echo 1 > /proc/sys/net/ipv4/ip_forward
modprobe ppp-compress-18
/sbin/service pptpd restart

-------------------------------------------------
vi /etc/pptpd.conf

localip 10.0.0.1
remoteip 10.0.0.51-100


vi /etc/ppp/options.pptpd

name vpn.domain.com
require-mschap-v2
require-mppe-128
ms-dns 192.168.1.1
ms-wins 192.168.1.2
logfile /var/log/ppp/pptpd.log


vi /etc/ppp/chap-secrets

"vpn" "vpn.domain.com" "1234" "*"


vi /etc/sysctl.conf

net.ipv4.ip_forward = 1

感謝大哥
^^

Posted by: andy at 2007年07月30日 15:47

請改用 ppp-2.4.3-6.2.1.i386.rpm
因為 ppp 2.4.4 會造成 pptpd 錯誤

那一版的 pptpd 是 for ppp 2.4.3 的

Posted by: Jamyy at 2007年07月30日 16:18

大哥晚安
您真厲害,搞定了,就如您所說的版本問題;原來這裡也有學問,現在可以連線了。真是受益良多!!非常感謝!

再請問一下,client端vpn連線成功,分配到的ip都是同一個是正常嘛(都是分配到10.0.0.51)?還是說要另外開dhcp server呢?這裡設定如下
vi /etc/pptpd.conf
localip 10.0.0.1
remoteip 10.0.0.51-100


非常感謝大哥指導,感謝感謝
^^

Posted by: andy at 2007年07月30日 18:44

pptp server 會依序分配 remoteip 所設定的 ip 給每個連入的 pptp client
當第一個 pptp client 連入後, 它會得到 10.0.0.51
此時若有第二個 pptp client 連入, 獲取的 ip 是 10.0.0.52
依此類推
當 pptp client 斷線後, 即釋放所佔用的 ip
你只有一個 pptp client
所以每次都會拿到第一個分配的 ip (10.0.0.51)

Posted by: Jamyy at 2007年07月30日 23:31

大哥您早
我是多台client測試的時候,發現他們分配到的ip都是同一個

^^

Posted by: andy at 2007年07月31日 09:59

早安~

我是沒有遇到這種情況

不過有一個可能的線索:
如果只是 service pptpd restart, 會出現這樣的訊息:
Warning: a pptpd restart does not terminate existing connections, so new connections may assigned the same IP address and cause unexpected results.
它是建議 service pptpd restart-kill 先中斷目前的連線
再 service pptpd start 重新啟動 pptpd

Posted by: Jamyy at 2007年07月31日 10:21

大哥早,
非長感謝大哥提點,重新開機後運作正常

非常感謝...^^

Posted by: andy at 2007年08月01日 10:20

呵~ 不用客氣
記得繼續保持積極的學習精神喲! :)

Posted by: Jamyy at 2007年08月01日 10:25

又發現一個問題想請教
請問webmin pptp vpn server有個active connections這裡顯示的username只會顯示Unknown而不會出現連線者帳號,是正常?
另我在vpn這篇文也有發個提問,想麻煩大哥check...^^

Posted by: andy at 2007年08月01日 10:57

Webmin 會從 /var/log/messages 抓 username
不過 pptpd 並沒有把登入的 username 寫入 /var/log/messages
而是 /var/log/wtmp
所以 Webmin 當然抓不到 username

就算把 /etc/pptpd.conf 裡的 logwtmp tag 註解掉
pptpd 也不會在 /var/log/messages 裡記錄 username

想知道誰連入 pptp server 的話
把 /etc/pptpd.conf 的 logwtmp 打開 (不要註解)
在 pptp server 裡執行 last 這個指令就行了

Posted by: Jamyy at 2007年08月01日 11:54

請問last要寫在rc.local裡頭讓它開機執行是嗎?

Posted by: andy at 2007年08月01日 12:15

不是
last 是在文字模式用來查詢連線記錄的指令
請從主機 console 端操作或以 ssh 連入主機, 用 root 身份執行 last
就會列出使用者連入本機的記錄
若資料超過一頁, 可用 last | less 來一頁一頁觀看 (按 q 結束)

Posted by: Jamyy at 2007年08月01日 12:45

了解了感謝大哥
^^

Posted by: andy at 2007年08月01日 12:48

感謝大哥回答
我的win client連線後Default Gateway出現的是win本機vpn連線ppp0的ip;這樣是哪裡錯誤?

Posted by: andy at 2007年08月01日 16:30

這是正常的
win client 預設在連線後走 pptp server 的路由
不過為什麼 gateway 是自己的 ip
這我就不清楚了

Posted by: Jamyy at 2007年08月02日 13:06

大哥您好!
有3个问题请教:
1、你介绍的PPTP VPN需要2张网卡吗?
2、我用FC5搭建了一个PPTP VPN,只有1张网卡,它是直接连到ISP的DSL上的,因此是ppp0;我用WinXP client连接到VPN上后,VPN Server上多出了ppp1,但ppp1的ip不是我在pptpd.conf设置的local ip和remote ip?而且不能在client连上Internet。
3、如果WinXP client要利用VPN Server上Internet,server端的pptpd.conf与options.pptpd应该有什么特殊的设置?
谢谢先!

Posted by: LaoWang at 2007年08月03日 15:04

您好!

1. 不用, 一張就行了
2. 請檢查 pptpd.conf 裡的 localip 和 remoteip 設定是否正確
3. 請依本篇所提內容設置即可

Posted by: Jamyy at 2007年08月03日 16:54

大哥午安,
可以在請教一下,vpn帳號的密碼可使用系統的passwd或shadow的檔案來取代嗎?

謝謝

Posted by: andy at 2007年08月06日 14:25

你好

應該是不行, 因為我用 google 找不到這方面的資訊 = =
poptop (linux pptp server 的套件名稱)
可透過 Radius plugin, 以 SAMBA 或 LDAP 的設置來進行驗証
請參考
http://poptop.sourceforge.net/dox/qna.html#20

Posted by: Jamyy at 2007年08月06日 16:58

大哥您好

我的pptpd 依照您的教學方式設定了,所有的設定一模一樣,
現在 windows xp 用vpn 是連上了 pptp server 了

奇怪的是無法上網,可以ping 得到網址、traceroute 也可以出去,用IE似乎有連接上的現像,但網頁就是出不來

實在想不懂有什麼原因會這樣造成

Posted by: Erichu at 2007年09月21日 19:10

Erichu 您好,

請問是 ping ip 和 ping domain name 都能通嗎?
如果 ping ip 能通, ping domain name 不通的話
應該是 dns 的問題;

如果 ping ip 和 ping domain name 都能通
就 ie 不通
檢查一下 ie 的 proxy 設定, 再試試看囉~

Posted by: Jamyy at 2007年09月22日 23:33

您好
請問一個怪問題

我架的linux vpn主機有2張網卡
eth0 單純接adsl對外的區間的其中1點ip 如 213.31.0.135
default getway 只在eth0 比如設為 213.31.0.131
eth1 為lan 內網的ip 如 10.100.1.252
不設 default getway

我從內網 其中一台pc 假設ip為 10.100.1.83
ping 213.31.0.135 會通有 reply from
但是從公司外面其他pc ping 213.31.0.135 卻都是 time out 這是什麼原因呢?

Posted by: kiru at 2007年10月01日 16:42

您好,
如果 "公司外面其他 PC" 是指 Internet 上的其他電腦的話 (如: 家裡的 PC)
請檢查 iptables 設定, 查看是否有擋外部網路 ping 進來的封包

Posted by: Jamyy at 2007年10月01日 17:01

謝謝回答 !
是的 ~ "公司外面其他 PC" 是指 Internet 上的其他電腦 (如: 家裡的 PC) 沒錯! 請好幾個其他朋友幫我ping都不通
linux iptables上我並沒有 設定擋ping的rule ~
若真的有檔 從內部lan 區網任一主機ip 去ping 213.31.0.135 為什麼會通呢? 這是我不懂之處! = ="

我iptables 只有 設定
iptables -A INPUT -p gre -j ACCEPT
iptables -A INPUT -p tcp --dport 1723 -j ACCEPT
若 ping 不通 從家裡vpn client主機去連vpn server 213.31.0.135 有可能能連線成功ㄇ?

謝謝.


Posted by: kiru at 2007年10月01日 17:21

您可以執行 telnet 213.31.0.135 1723 試試看能否連入該埠口

Windows: 若能連上, 命令提示字元視窗會一片空白, 按 Ctrl + ] 輸入 q 脫離

Linux: 若能連上, 會出現 Escape character is '^]'. 按 Ctrl + ] 輸入 q 脫離

213.31.0.135 是該主機其中一張網卡的 ip, 一般狀況下 (無鎖 ping) 從內部 ping 有回應是正常的.

如果還是不行, 請用 mail 詳細討論: jamyychang 小老鼠 gmail 點 com

Posted by: Jamyy at 2007年10月02日 09:46

若公司區網內LINUX PPTP SERVER已經架起來, 從公司外其他遠端地方XP CLIENT 也可以連線登入 LINUX PPTP SERVER成功.

LINUX PPTP SERVER 有啟動 SAMBA SERVICE. 在公司區網內其他WIN OS 主機上也可以再 網路芳鄰看到 這台LINUX PPTP SERVER.

公司外其他遠端地方XP CLIENT 登入VPN成功後得到一個公司內內部IP後, 此XP CLIENT使用 遠端桌面程式 和 VNC 用區網內部的IP連線登入其他SERVER 是可以成功.

但是為何 公司外遠端地方XP CLIENT 卻無法用
1."網路磁碟機" 方式直接連接 區網內的 WIN2000檔案共享主機上的目錄?
2.或是 檔案總管KEY \\內部WIN2000檔案共享主機IP 是失敗?

有何方法可以解決此問題? 3Q ~

Posted by: arkai at 2007年10月04日 11:39

to: arkai

請檢查 /etc/ppp/options.pptpd
1. 確定裡面的 proxyarp 不是被註解掉的
2. 確定 ms-wins 的設置是否正確

參考資料:
http://home.swbell.net/berzerke/howto.html

Posted by: Jamyy at 2007年10月06日 17:10

Dear Jamyy

我的環境如下

甲地
LINUX(VPN Server)
WAN:PppOE(ppp0)
LAN:192.168.1.6
VPN localip:192.168.1.252
VPN remoteip:192.168.9.10-99
proxyarp已開

WINXP(PC1)
WAN:經LINUX的NAT(.6)上網
LAN:192.168.1.5
DefaultGW:192.168.1.6

乙地
WINXP(PC2)
WAN:經atur硬撥的NAT(.254)上網
DefaultGW:192.168.4.254
LAN:192.168.4.3
VPN Client ip:192.168.9.10

今由乙地連上甲地之VPN Server
(無勾選使用預設閘道,防火牆已關閉)
ping狀況如下
PC2->VPN Client ip OK!
PC2->VPN local ip OK!
PC2->LINUX LAN OK!
於PC2增設static route後
PC2->PC1 OK!

但相反之
PC1->VPN localip OK!
PC1->VPN remoteip LOSS!
PC1->PC2 LOSS!
於LINUX(VPN Server)
LINUX->VPN localip OK!
LINUX->VPN Client ip LOSS!

我有於上加設static route
但還是不通
不知問題是出在pptpd的設定錯誤?
導致雖vpn連線已經建立,但甲乙兩地還是只能若有似無的ping到對方...

又於乙地PC2每每撥接後皆需重下route add指令
於vpn上是否可跑rip之類的協定,讓甲乙兩地自動學習對方的routing table?

試很多天了,就是不通,還煩請您指點,謝謝~~

Posted by: pinky at 2007年12月04日 22:01

pinky 您好,

您的 pptp vpn 設定看起來有點複雜
如果只是要讓甲乙兩地的電腦可以互通
最簡單的做法是:

/etc/pptpd.conf:
localip 192.168.1.6
remoteip 192.168.1.10-99

這樣一來, 只需要 PC2 撥入 vpn server, 取得 remoteip (如: 192.168.1.10)
此時 PC1 與 PC2 都在同網段, 就不會發生路由問題

Posted by: Jamyy at 2007年12月06日 09:54

jammy 你好,

我在同一台電腦上架pptp的client與server,
電腦的平台是windows2000(client),上面執行
著vmware,linux(server)在vmware上執行,
設定檔按照您的方式設定,套件版本如下
ppp-2.4.4-2
pptpd-1.3.3-1.fc6
pptp-1.7.1-2.fc6
以上套件都是即時用yum install的,
應該不會有錯誤吧?
但是從windows進行連線時,出現了以下的訊息視窗:
正在驗證使用者及密碼...
錯誤 737:偵測到回送
另外在linux端檢視/var/log/messages的檔案,
比較關鍵的內容如下:
1.Can't open options file /root/.ppprc:
Permission denied.
2.GRE:Bad checksum from pppd.
3.Using interface ppp0
Connect: ppp/dev/pts/2
Modem hangup.
Connection terminated.
Exit.

試了很多天了,不知道如何解決這個問題?
煩請您指點,謝謝


Posted by: elvis at 2008年01月18日 16:21

多台遠端PC(XP)連上Linux VPN Server後:
1.遠端PC之間,除了\\192.168.X.X連線方法外,可否使用網芳.
2.遠端PC與Lan端之間,又如何分享資源.
3.smb daemon又如何與pptpd搭配結合使用.

煩請解惑,不勝感激

Posted by: Mark Lin at 2008年02月26日 11:13

jammy 您好

您知道怎麼測最大同時可以撥出或撥入幾條 VPN tunnel ?
可以用什麼軟體可以來測嗎??

Posted by: 小白 at 2008年04月07日 01:16