我正在尝试连接到位于 Cisco 881 NAT 路由器后面的 PPTP 服务器。该服务器运行的是 Ubuntu Server 12.04,并运行 Poptoppptpd
作为监听连接的 PPTP 守护进程。
正如我在其他问题,我正在尝试设置 Cisco 881 路由器来替换我的旧 Linksys WAG320N。除了允许 1723 通过防火墙进入外,同一台服务器和 WAN 连接无需特殊配置即可与 WAG320N 配合使用。
在 Cisco 881 上,我使用较新的ip nat enable
或 NAT NVI 通过防火墙为路由器后面运行的服务设置静态路由。原因是我无法在内部使用本地 IP 地址运行我的实时 DNS 域的另一个副本。不过,为了解决这个问题,我重建了具有ip nat inside/outside
NAT 风格的路由器,但这个问题仍然存在。HTTP/SMTP/IMAP 等在路由器的 WAN 和 LAN 接口上都可以正常工作。我只遇到了 SIP(请参阅其他问题)和 PPTP 问题。
我的问题是 GRE 似乎没有正确通过 NAT,并且连接的一端在应该接收 GRE 流量时却没有接收,因此服务器挂断了连接。
/var/log/syslog
以下是启用调试的示例/etc/pptpd.conf
:
Dec 11 21:06:30 <HOSTNAME> pptpd[22626]: MGR: Launching /usr/sbin/pptpctrl to handle client
Dec 11 21:06:30 <HOSTNAME> pptpd[22626]: CTRL: local address = 192.168.1.50
Dec 11 21:06:30 <HOSTNAME> pptpd[22626]: CTRL: remote address = 192.168.1.51
Dec 11 21:06:30 <HOSTNAME> pptpd[22626]: CTRL: pppd options file = /etc/ppp/pptpd-options
Dec 11 21:06:30 <HOSTNAME> pptpd[22626]: CTRL: Client 82.132.248.216 control connection started
Dec 11 21:06:30 <HOSTNAME> pptpd[22626]: CTRL: Received PPTP Control Message (type: 1)
Dec 11 21:06:30 <HOSTNAME> pptpd[22626]: CTRL: Made a START CTRL CONN RPLY packet
Dec 11 21:06:30 <HOSTNAME> pptpd[22626]: CTRL: I wrote 156 bytes to the client.
Dec 11 21:06:30 <HOSTNAME> pptpd[22626]: CTRL: Sent packet to client
Dec 11 21:06:30 <HOSTNAME> pptpd[22626]: CTRL: Received PPTP Control Message (type: 7)
Dec 11 21:06:30 <HOSTNAME> pptpd[22626]: CTRL: Set parameters to 100000000 maxbps, 64 window size
Dec 11 21:06:30 <HOSTNAME> pptpd[22626]: CTRL: Made a OUT CALL RPLY packet
Dec 11 21:06:30 <HOSTNAME> pptpd[22626]: CTRL: Starting call (launching pppd, opening GRE)
Dec 11 21:06:30 <HOSTNAME> pptpd[22626]: CTRL: pty_fd = 6
Dec 11 21:06:30 <HOSTNAME> pptpd[22626]: CTRL: tty_fd = 7
Dec 11 21:06:30 <HOSTNAME> pptpd[22626]: CTRL: I wrote 32 bytes to the client.
Dec 11 21:06:30 <HOSTNAME> pptpd[22626]: CTRL: Sent packet to client
Dec 11 21:06:30 <HOSTNAME> pptpd[22627]: CTRL (PPPD Launcher): program binary = /usr/sbin/pppd
Dec 11 21:06:30 <HOSTNAME> pptpd[22627]: CTRL (PPPD Launcher): local address = 192.168.1.50
Dec 11 21:06:30 <HOSTNAME> pptpd[22627]: CTRL (PPPD Launcher): remote address = 192.168.1.51
Dec 11 21:06:30 <HOSTNAME> pppd[22627]: Plugin /usr/lib/pptpd/pptpd-logwtmp.so loaded.
Dec 11 21:06:30 <HOSTNAME> pppd[22627]: pppd 2.4.5 started by root, uid 0
Dec 11 21:06:30 <HOSTNAME> pppd[22627]: Using interface ppp0
Dec 11 21:06:30 <HOSTNAME> pppd[22627]: Connect: ppp0 <--> /dev/pts/3
Dec 11 21:06:30 <HOSTNAME> pptpd[22626]: GRE: Bad checksum from pppd.
Dec 11 21:06:31 <HOSTNAME> pptpd[22626]: CTRL: Received PPTP Control Message (type: 15)
Dec 11 21:06:31 <HOSTNAME> pptpd[22626]: CTRL: Got a SET LINK INFO packet with standard ACCMs
Dec 11 21:07:00 <HOSTNAME> pppd[22627]: LCP: timeout sending Config-Requests
Dec 11 21:07:00 <HOSTNAME> pppd[22627]: Connection terminated.
Dec 11 21:07:00 <HOSTNAME> avahi-daemon[1042]: Withdrawing workstation service for ppp0.
Dec 11 21:07:00 <HOSTNAME> pppd[22627]: Modem hangup
Dec 11 21:07:00 <HOSTNAME> pppd[22627]: Exit.
Dec 11 21:07:00 <HOSTNAME> pptpd[22626]: GRE: read(fd=6,buffer=6075a0,len=8196) from PTY failed: status = -1 error = Input/output error, usually caused by unexpected termination of pppd, check option syntax and pppd logs
Dec 11 21:07:00 <HOSTNAME> pptpd[22626]: CTRL: PTY read or GRE write failed (pty,gre)=(6,7)
Dec 11 21:07:00 <HOSTNAME> pptpd[22626]: CTRL: Reaping child PPP[22627]
Dec 11 21:07:00 <HOSTNAME> pptpd[22626]: CTRL: Client 82.132.248.216 control connection finished
Dec 11 21:07:00 <HOSTNAME> pptpd[22626]: CTRL: Exiting now
Dec 11 21:07:00 <HOSTNAME> pptpd[5803]: MGR: Reaped child 22626
就思科而言,我所需要的只是ip nat source static tcp <SERVER LAN IP> 1723 interface FastEthernet4 1723
但这当然似乎并没有像应该的那样帮助 GRE 流量通过。
尝试从与服务器相同的 LAN(路由器后面)连接到服务器的 LAN IP,PPTP 连接工作正常,因此我相信服务器的配置没有问题。此外,我在 WAG320N 上需要做的就是在防火墙中打开 1723。
这是我当前的路由器配置:
!
! Last configuration change at 20:20:15 UTC Tue Dec 11 2012 by xxx
version 15.2
no service pad
service timestamps debug datetime msec
service timestamps log datetime msec
service password-encryption
!
hostname xxx
!
boot-start-marker
boot-end-marker
!
!
enable secret 4 xxxx
!
aaa new-model
!
!
aaa authentication login local_auth local
!
!
!
!
!
aaa session-id common
!
memory-size iomem 10
!
crypto pki trustpoint TP-self-signed-xxx
enrollment selfsigned
subject-name cn=IOS-Self-Signed-Certificate-xxx
revocation-check none
rsakeypair TP-self-signed-xxx
!
!
crypto pki certificate chain TP-self-signed-xxx
certificate self-signed 01
xxx
quit
ip gratuitous-arps
ip auth-proxy max-login-attempts 5
ip admission max-login-attempts 5
!
!
!
!
!
ip domain list dmz.xxx.local
ip domain list xxx.local
ip domain name dmz.xxx.local
ip name-server 192.168.1.x
ip cef
login block-for 3 attempts 3 within 3
no ipv6 cef
!
!
multilink bundle-name authenticated
license udi pid CISCO881-SEC-K9 sn xxx
!
!
username admin privilege 15 secret 4 xxx
username joe secret 4 xxx
!
!
!
!
!
ip ssh time-out 60
!
!
!
!
!
!
!
!
!
interface FastEthernet0
no ip address
!
interface FastEthernet1
no ip address
!
interface FastEthernet2
no ip address
!
interface FastEthernet3
switchport access vlan 2
no ip address
!
interface FastEthernet4
ip address dhcp
ip nat enable
duplex auto
speed auto
!
interface Vlan1
ip address 192.168.1.x 255.255.255.0
no ip redirects
no ip unreachables
no ip proxy-arp
ip nat enable
!
interface Vlan2
ip address 192.168.0.x 255.255.255.0
!
ip forward-protocol nd
ip http server
ip http access-class 1
ip http authentication local
ip http secure-server
!
!
ip nat source list 1 interface FastEthernet4 overload
ip nat source list 2 interface FastEthernet4 overload
ip nat source static tcp 192.168.1.x 1723 interface FastEthernet4 1723
!
!
access-list 1 permit 192.168.0.0 0.0.0.255
access-list 2 permit 192.168.1.0 0.0.0.255
!
!
!
!
control-plane
!
!
banner motd
Authorized Access only
!
line con 0
exec-timeout 15 0
login authentication local_auth
line aux 0
exec-timeout 15 0
login authentication local_auth
line vty 0 4
access-class 2 in
login authentication local_auth
length 0
transport input all
!
!
end
我很感激在 Server Fault 上已经有几个类似的问题:pptpd 在 Ubuntu Server 11.10 上无法外部运行,pptp无法连接。这些问题尚未完全解决,我认为最好不要劫持别人的问题。我尝试使用其他问题的答案中的建议,但我仍然需要一些帮助才能使其正常工作。如果这不是正确的做法,请原谅。
更新日期:2012/12/16:
我在这个问题上取得的唯一进展是,我确信问题是由 GRE 隧道(PPTP 连接完成所必需的)被阻止引起的。尝试连接时,我可以看到show ip nat nvi translations
在 1723 上设置了 TCP 转换,并且还设置了 GRE 转换。我似乎能够在服务器所在的 LAN 上看到与 GRE 相关的数据包,因此我相信服务器正在发送(?)GRE 数据包,但是在尝试连接时在客户端 PC 上运行 Wireshark 时完全没有显示 GRE 数据包。
虽然我上面发布的配置中没有配置指令(我可以指出)专门阻止它们,但似乎不允许 GRE 数据包进出路由器的防火墙,即使为服务器的 LAN 地址设置了 NAT 转换条目。有人能帮我确保 GRE 数据包不会被路由器的防火墙阻止,这样就可以排除这可能是一个问题吗?
答案1
您无法通过 PAT:ed 路由器转换 GRE。GRE 没有任何可用于保持状态的第 4 层信息。GRE 不基于 TCP 或 UDP,而是其自己的 IP 协议编号 47。
您应该从 PAT 更改为 one2one-NAT 设置或将 VPN 设置完全更改为 IPSec。
答案2
我不知道为什么“ip nat inside/outside”的配置对你不起作用(对我来说是有效的),也许你忘记在访问列表中允许 GRE?
您可以同时使用“ip nat enable”和“ip nat inside/outside”。
我通常对除 PPTP 之外的所有静态转换使用“ip nat enable”,对动态转换(如果有客户端使用出站 PPTP)和 PPTP(tcp 端口 1723)的静态转换使用“ip nat inside/outside”。此外,您需要在访问列表中允许 GRE 流量。
至于为什么会这样 - 我不知道,可能是 PPTP 在 NAT NVI 中没有完全支持,或者其他原因。我也不知道你对 SIP 的问题,也许是一样的。