ubnt解决方案
查看: 4808|回复: 7

【持续更新】PPTP client

[复制链接]

141

回帖

2161

积分

139 小时

在线时间

少校

注册时间
2013-10-16
金币
1975 个
威望
0 个
荣誉
0 个
累计签到:192 天
连续签到:0 天
[LV.200]无线新星
发表于 2014-7-1 11:02
亲们~由于资料内容有些多,本人时间有限,所以汉化工作只能一点点来了,希望大家持续关注与支持!


准备工作
所需程序包
l   服务器(remote station
我们假设这些都进行了预配置,这是在客户端运行OpenWrt的最基本的东西。
l   客户端(OpenWrt)


安装
Opkg
opkg update
opkg install ppp-mod-pptp
如果需要LuCI的支持,那么还需另外安装备protocol程序包:
opkg install luci-proto-ppp


欢迎大家提出自己的想法和意见,可以以回复的形式提出,或者加入我的QQ群大家一起交流,互相学习。
      名   称:openwrt开发
      群   号:  331230369 、318937037、208461032、278691630



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册 微信登录

x
web认证请加ApFree群

141

回帖

2161

积分

139 小时

在线时间

少校

注册时间
2013-10-16
金币
1975 个
威望
0 个
荣誉
0 个
累计签到:192 天
连续签到:0 天
[LV.200]无线新星
发表于 2014-7-11 11:10
配置

        服务器配置

这是在客户端运行OpenWrt的基本操作。

        客户端配置

注:在此指南中,运行于OpenWrt的PPTP客户端版本为1.7.1-3,有许多习惯使用Linux的人也使用相同版本,所以如果应用LuCI进行配置,那么以下所述就不会生效。可能需要用最初的Linux方式进行配置。在这种情况下,tunnel就会正常运行,但不会在LuCI显示接口。

此处所描述的配置通过在LuCI添加一个VPN接口来完成的。它会自动服从UCI的配置并且VPN接口会在文件your/etc/config/network中出现。

从任意一个网络浏览器接入到你的路由器并点击administration切换到高级菜单。选择=>网络=>接口,并在“Add entry”给你的VPN接口起个名字。将PPTP先作protocol,LuCI将会以字段的形式显示PPTP连接的主要选项。

现在创建/分配固件区并填写“PPTP-Server”(使用服务器的IP地址),用户名和密码,必须从你的VPN提供者获取这三个信息。

现在你必须决定是否运行(默认)“用ppdp替换目前默认路由”,对此你也需要了解它是如何运作的。如果运行,它将不会在你的路由器上创建一个新的默认路由。通常PPTP客户端只有在成功连接后才处理这个问题。所以当tunnel上升时,路由就会默认VPN并且如果tunnel崩溃时,它会默认反回原始路由。如果你想让所有流量都通过此tunnel的话,就可以运行。如果你不想,你最好为了进行测试而进行检测,在确认所有正常之后取消选中。

以上内容也许是你所需要的,也许不是。这取决于你VPN供应商的要求。你需要启用tunnel并检测日志来观察它是否上升。如果你已经了解你需要什么,使用“Additional Field”菜单添加相应的选项。例如Keep-Alive,许多VPN供应商都支持,但只是想让你了解,在此添加的编号通常是在tunnel崩溃时,并且不是keep-alive程序包之间的间隔时,试图重新连接的编号。另外一个有趣的区域是“Additional pptp options”,在这里所有东西都没有列出但都在支持运行。通用参数都是无状态的点对点加密。它们都需要用逗号隔开,并且逗号后边无空格。

现在你必须点击保存&应用来查看你的VPN是否运行。如果所有正常,它会在LuCI网络/接口有效,并且你的IP VPN地址—tunnel终点的地址将会出现在“Address”栏。你还需要在状态/路由检测你的路由表。默认路由通常是在“目标”和“IPV4网络”用0.0.0.0的。你的VPN网关也会出现在这里。这个地址是你的供应商商的tunnel终点,所以它不同于出现在接口菜单的那个,但它必须是位于相同的子网络。

        通过终端配置

编辑/etc.config/network文件,替换VPN用户名,VPN密码和由VPN供应商所给参数的服务器。

config 'interface' 'vpn'
option 'ifname' 'pptp-vpn'
option 'proto' 'pptp'
option 'username' 'vpnusername'
option 'password' 'vpnpassword'
option 'server' 'vpn.example.org or ipaddress'
option 'buffering' '1'

缓冲区选择启用(1)或关闭(0)缓冲和程序包重排序。这是可选的并且默认是1(启动)。如果你不知道缓冲或重排序是什么意思,就不要使用或者可以对其进行启动。关闭它会使你的VPN速度缓慢。

所有其它选项都是UCI标准,关于他们的信息可以在/etc/config/network找到。在测试设备安装物理接口,ifname选项自动默认pptp-vpn,无论你如何命名,但无需测试。

在重启网络服务器或reboot你的路由器之后,如果你的vpn handshake和认证正常运行的话,将会像在LuCI启用时一样显示pptp-vpn接口。你也可以使用CLI进行检测。从你的路由器(不是电脑),试着ping一些wan地址来查看是否一切正常,并跳到以下Routing部分。


防火墙

切换到网络/防火墙/流量控制并使用“添加入口”让“来源”lan -“终点”vpn允许流量从LAN到VPN。然后核实你的网络/防火墙的设置。你的VPN将出处于“zone”区域,但所有设置都为“拒绝”。只是将“output”更改为accept并检测“MASQ”box为了使流量通过VPN而启用NAT。如果你按照以上建议将VPN设置为默认路由,那么只需将你的路由器当做网关,用电脑浏览任何一个“我的IP”网页来测试你的设置即可。如果一切正常,你的IP会与你的tunnel endpoint相同。


欢迎大家提出自己的想法和意见,可以以回复的形式提出,或者加入我的QQ群大家一起交流,互相学习。
      名   称:openwrt开发
      群   号:  331230369 、318937037、208461032、278691630
web认证请加ApFree群

141

回帖

2161

积分

139 小时

在线时间

少校

注册时间
2013-10-16
金币
1975 个
威望
0 个
荣誉
0 个
累计签到:192 天
连续签到:0 天
[LV.200]无线新星
发表于 2014-7-14 09:57
Routing
Routing是在网络选择发送网络信息流量的通道的进程。有两个routing protocol来保证此进程得以自动实现。为此我们将使用静态路由。Routing是通过内核的一个组件得以实现的,并且能够由包含在iproute2程序包中的IP进行配置。每次调用的时候模拟iptables或tc进行配置,你会编写一个在每个boot或ifup执行的shell script。

但自从OpenWrt提供UCI,我们需要用它来进行配置。与routing相关的配置需要在/etc/config/network进行。

你也可以不使用UCI,步骤如下:

通过tunnel进行routing可以像“send-it-all”一样简单,如果你使用LuCI创建接口的话,这些都是默认的。高级routing并非是操作的目地,但是你所需要的是基于routing的simple source,即路由流量通过你的VPN,此点是基于主机 IP地址。以下为操作步骤:

首先你需要安装ip程序包。它使你能够启用不只一个routing table,并且能够无任何附加防火墙规则的情况下创建它们的应用规则。为了能够实现此操作,主机IP必须一直保持一致。你可以在主机手动进行配置或使用它的MAC地址或主机名称在你的DHCP指定一个。

现在使用opkg或LuCI来安装IP并创建一个新的routing table。编辑/etc/iproute2/rt_tables。如下:

#
# reserved values
#
255  local
254  main
253  default
10   vpn
0    unspec
#
# local
#
#1   inr.ruhelp

只是第10行添加了vpn,并且编号和名称可选,只是不要与已存在的表格混淆,除非你知道你在进行什么操作。保存文件并在终端添加一个或多个主机规则。假设你想用地址192.168.1.20和192.168.1.30来route两个主机:

ip rule add from 192.168.1.20 table vpn
ip rule add from 192.168.1.30 table vpn

现在添加一个默认路由到你新的表格并清除route cache,使用

ip route add default via <ip_of_the_far_end_of_your_tunnel> dev <pptp_iface_name> table vpn
ip route flush cache

现在所有源于使用动态路由表的主机的流量将会通过VPN。你可以从已选择路径主机的VPN进行跟踪。你创建的表格将会免于重启,但路由和规则将会重启,所以你必须以某些方式对它们进行添加。查询文件以找出适当的方式进行此操作,否则会一直等到基本操作完成为止。

只使用IP程序包routing操作就可以做很多事情。对于更复杂的routing rules,它也能够与iptables marking rules相结合:iptables使用prerouting和mangle table来标记程序包,而ip就依据这些标记对它们进行route操作。


欢迎大家提出自己的想法和意见,可以以回复的形式提出,或者加入我的QQ群大家一起交流,互相学习。
      名   称:openwrt开发
      群   号:  331230369 、318937037、208461032、278691630
web认证请加ApFree群

141

回帖

2161

积分

139 小时

在线时间

少校

注册时间
2013-10-16
金币
1975 个
威望
0 个
荣誉
0 个
累计签到:192 天
连续签到:0 天
[LV.200]无线新星
发表于 2014-7-18 09:37
本帖最后由 bandgear 于 2014-7-18 09:39 编辑

Oldwiki: PPTP Client

如何将你的路由器作为PPTP客户端进行配置,使其连接到PPTP服务器,如MS VPN。

基本要求

程序包
安装pptp,kmod-mppe和kmod-crypto程序包:
ipkg install pptp kmod-mppe kmod-crypto

如果你使用了为OpenWrt而创建的White Russian RC5时,当PPTP程序包已经被安装,为了加密和压缩的需求,你仍然需要安装kmod-mppe和kmod-crypto。

模块


将以下内容添加到/etc/moudules:
slhc
ppp_generic
ppp_async
如果你需要加密或压缩,将以下内容添加到/etc/moudles:
ppp_mppe_mppc
arc4
sha1
然后reboot或load一次此模块:
insmod slhc
insmod ppp_generic
insmod ppp_async
insmod ppp_mppe_mppc
insmod arc4
insmod sha1
配置一个Tunnel
/etc/ppp/options.pptp
此文件是由pptp程序包提供。它为所有tunnel设置选项。
现在没有必要修改文件,但如果你愿意,可以在以后修改一些选项,查看pppd手册页面:


/etc/ppp/peers/peer_name
创建/etc/ppp/peers目录并创建以peer命名的文件:
mkdir -p /etc/ppp/peers
cd /etc/ppp/peers
touch peer_name
chmod 600 peer_name
用你试图建立连接的描述文件代替以上的peer_name。
被创建的文件说明了与vpn服务器的链接和一些必需的选项。编辑并添加以下内容到你的peer_file:
pty "pptp hostnameOrIp --nolaunchpppd"
将hostnameOrlp用你想连接的VPN服务器DNS主机名称或IP地址替换。
mppe required,stateless
如果连接需要加密,使用stateless encryption。大多数tunnel服务器都要求被加密,所以先试着进行此操作,如果你看到提示:服务器不需要MPPE,然后将以下内容删除。
name DOMAIN\\Username
确认VPN-connection的用户名(密码保存在chap-secrets)。将DOMAIN用用户所属的Windows Domain代替,如果什么都不需要,删除DOMAIN\\。同时也将以上的用户名用你想与VPN服务器相连接的用户所代替。
remotename peer_name
添加以下内容,在chap-secrets适当说明帐户。
file /etc/ppp/options.pptp
命令pppd加载由pptp程序包提供的通用选项:
replacedefaultroute
如果你使用PPTP访问网络,你需要添加以下内容:
ipparam name
此操作为可选性操作。将name替换成为peer-file所选的名称。这被用作基于连接执行的ip-up和ip-down角本的参数,以及连接的tear down的参数。因此你可以编写这个角本来实现依据我们连接或分离的peer而进行不同的运行操作。
/etc/ppp/chap-secrets
/etc/ppp/chap_scerets文件中包含供pppd使用的用户名和密码列表。
对于bin和pptp构建的OpenWrt,此文件将在/rom作为符号连接,所以删除连接,复制模版,并确认是chmod 600。
在/etc/ppp/chap-scerets文件添加以下内容:
DOMAIN\\Username peer_name Password *
有四个文件是用空隔隔开的:
l  替代DOMAIN\\Username。有一点很重要,它要与以上/etc/ppp/peers/peer_name文件中的name相匹配。所以如果没有使用DOMAIN\\,这里也禁止输入。
l  用你在/etc/ppp/peers/peer_naem文件中使用的任何一个remotename来替换peer_name
l  将密码用PPTP服务器提供给你的密码所替换。如果密码内有空格或特殊字符,用双引号括上,“像这样”。
l  星号会告诉pppd此tunnel可能被IP地址所使用。通常PPTP服务器会确认此地址。
总之,在许多情况下这些仍然不足以让PPTP-internet运行。由于pppd中的主要bug,它通过自建接口(ppp0)在pppt-server创建了路由。这种方法它不能获得VPN服务器的路由并且几分钟之内就切断了连接。为了避免这种情况,你需要在连接时删除此路由。如果你的VPN服务器是位于默认网关之后(不在子网络),你也必须向VPN服务器添加另外一个路由。这种情况比较常见,并且非常少数的路由能够向VPN服务器指定路由。
所以如果能够让这种情况正常运转的话,你需要将以下内容添加到/etc/ppp/lp-up:
DG=10.188.0.17 #this is your default gateway
/sbin/route del -host $5 dev ppp0 #we delete "stupid" pppd route
/sbin/route add -host $5 gw $DG dev vlan1 #we add route to vpn-server in case you need it






欢迎大家提出自己的想法和意见,可以以回复的形式提出,或者加入我的QQ群大家一起交流,互相学习。
      名   称:openwrt开发
      群   号:  278691630、331230369 、318937037、208461032



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册 微信登录

x
web认证请加ApFree群

141

回帖

2161

积分

139 小时

在线时间

少校

注册时间
2013-10-16
金币
1975 个
威望
0 个
荣誉
0 个
累计签到:192 天
连续签到:0 天
[LV.200]无线新星
发表于 2014-7-29 10:18
本帖最后由 bandgear 于 2014-7-29 10:20 编辑

测试Tunnel

Pppd命令是用来启动一个tunnel。语句为pppd call peername,这个peername是位于/etc/ppp/peers中peer文件中的一个。
pppd call peername updetach



要停止tunnel,切断pppd进程:
killall pppd
测试一个tunnel并向控制台发送debug output。
pppd call peername debug dump nodetach


一个成功连接的Output可能如下:
root@ap1:~# pppd call peername debug nodetach
using channel 2
Using interface ppp1
Connect: ppp1  /dev/pts/2
sent [LCP ConfReq id=0x1   ]
rcvd [LCP ConfReq id=0x0         ]
sent [LCP ConfRej id=0x0     ]
rcvd [LCP ConfAck id=0x1   ]
rcvd [LCP ConfReq id=0x1    ]
sent [LCP ConfNak id=0x1 ]
rcvd [LCP ConfReq id=0x2    ]
sent [LCP ConfAck id=0x2    ]
sent [LCP EchoReq id=0x0 magic=0xeae657f6]
rcvd [CHAP Challenge id=0x0 , name = "VPNSERVER"]
sent [CHAP Response id=0x0 , name = "DOMAIN\\Username"]
rcvd [LCP EchoRep id=0x0 magic=0x71251209]
rcvd [CHAP Success id=0x0 "S=09F4D2BD2B89C41308C4853687110838FB1D1DE3"]
sent [CCP ConfReq id=0x1 ]
sent [IPCP ConfReq id=0x1  ]
rcvd [CCP ConfReq id=0x4 ]
sent [CCP ConfNak id=0x4 ]
rcvd [IPCP ConfReq id=0x5 ]
sent [IPCP ConfAck id=0x5 ]
rcvd [CCP ConfNak id=0x1 ]
sent [CCP ConfReq id=0x2 ]
rcvd [IPCP ConfRej id=0x1 ]
sent [IPCP ConfReq id=0x2 ]
rcvd [CCP ConfReq id=0x6 ]
sent [CCP ConfAck id=0x6 ]
rcvd [CCP ConfAck id=0x2 ]
MPPC/MPPE 128-bit stateful compression enabled
rcvd [IPCP ConfNak id=0x2 ]
sent [IPCP ConfReq id=0x3 ]
rcvd [IPCP ConfAck id=0x3 ]
local IP address 192.168.0.2
remote IP address 192.168.0.1
Script /etc/ppp/ip-up started (pid 872)
Script /etc/ppp/ip-up finished (pid 872), status = 0x0
配置Routing
/etc/ppp/ip-up和/etc/ppp/ip-down
/etc/ppp/ip-up文件是在启用tunnel时执行的shell script。
注:在Kamikaze会提供ip-up和ip-down。分别代替/etc/ppp/ip-up和/etc/ppp/ip-down当中的脚本。确认他们都被标记出可执行。创建文件,如果不存在,设置执行许可:
touch /etc/ppp/ip-up
chmod 755 /etc/ppp/ip-up
touch /etc/ppp/ip-down
chmod 755 /etc/ppp/ip-down
编辑文件并添加以下内容,#!/bin/sh需要添加在第一行,用来启用对脚本的执行。另外一个文本用在pppd启用这些脚本。
#!/bin/sh
# parameters
# $1 the interface name used by pppd (e.g. ppp3)
# $2 the tty device name
# $3 the tty device speed
# $4 the local IP address for the interface
# $5 the remote IP address
# $6 the parameter specified by the 'ipparam' option to pppd
第六个参数是由以上peer-file中的ipparam定义。这是一个非常有用的参数,它是用来区分基于连接到哪个tunnel或PPP的脚本运行状况。
对于ip-up和ip-down脚本的语类结构应该检测$6参数是否与适当的代码段相匹配,通过如下的一个case branch:
case "$6" in peer-name1)    ;; peer-name2)    ;;  *)esacexit 0
将peer-name1替换成以上peer-file中给ipparam的值。我们配置了第一个vpn连接,而不是peer-name2。当添加另外一个连接时,它会被作为模版收录在此。现在要将它删除,也要删除>,这些都将被以下命令替代。
当你在这些脚本使用命令时,要确认使用他们的full path或先将 “/usr/sbin” 添加到PATH。
Iptables(防火墙)规则
当tunnel加大或卸载时,更新你的防火墙规则,我们需要在以上创建的ip-up和ip-down脚本添加一些命令。还需要注意的是所有这些命令你都可以添加一些例如/etc/inin.d/S70routes之类的东西。即使你没有基于S70routes执行的ppp0接口,它还是会正常运行。在这种情况下,你没必要删除ip-down中的这些规则。你只需要将以下内容添加到你的S70routes:
iptables -A FORWARD -t filter -i br0 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -t filter -i ppp0 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -t nat -A POSTROUTING -o ppp0 -s 192.168.168.0/24 -d 0/0 -j MASQUERADE
192.168.0/24是你的初始子网络(LAN)。
允许与tunnel的outgoing communication,添加以下内容到ip-up:
iptables -A forwarding_rule -o $1 -j ACCEPT
同样,如果你想要允许源于tunnel的incoming traffic,添加以下内容到ip-up:
iptables -A forwarding_rule -i $1 -j ACCEPT
在tunnel以外启用masquerading(NAT),添加以下内容到ip-up:
iptables -t nat -A postrouting_rule -o $1 -j MASQUERADE
Masquerading不需要进行以上描述的要求。
iptables -A forwarding_rule -i $1 -j ACCEPT
这种要求只有在tunnel的另一端向你的网络发送流量时才需要。Incoming traffic要求tunnel的另一端通过静态路由或其它方式来了解我们本地网络拓扑结构图。
当添加iptables规则时,我们需要一个在ip-down当中有相应的删除。像上面一样简单的添加一些命令到ip-down,将-A用-D代替。
iptables -D forwarding_rule -o $1 -j ACCEPT
iptables -D forwarding_rule -i $1 -j ACCEPT
iptables -t nat -D postrouting_rule -o $1 -j MASQUERADE
静态路由
以下说明是假设你没有将tunnel用作默认路由。
为tunnel添加一个网络到routing table。大致语句如下:
route add -net  netmask  $1
用适当值来代替通过vpn连接到你想要的那个
例如,使网络192.168.0.0拥有可获得的255.255.255.0网络掩码,添加以下内容:
route add -net 192.168.0.0 netmask 255.255.255.0 $1
一个相应的路由delete命令也需要添加到ip-down脚本。从routing table删除一个网络,用del代替add,并且在命令尾部删除$1,如果不需要的话
继续以上的示例,删除由ip-up为192.168.0.0/255.255.255.0网络所添加的路由:
route del -net 192.168.0.0 netmask 255.255.255.0
如果为了适当的连接进入ip-down,当连接断开时192.168.0.0/24-network将会从静态路由中删除。
所有程序包的静态路由
如果你想将所有程序包都导向到tunnel,这是有可能实现的。但需要注意的是,如果你也对tunnel的程序包进行了此操作,那么你会以routing loop结束,并且不会正常运行。为了避免这一情况,使用网络接口为你的tunnel服务器添加一个静态路由。然后添加一个默认路由将其它东西导向至网络接口。静态主机路由会优先于默认路由,为了避免Loop。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册 微信登录

x
web认证请加ApFree群

141

回帖

2161

积分

139 小时

在线时间

少校

注册时间
2013-10-16
金币
1975 个
威望
0 个
荣誉
0 个
累计签到:192 天
连续签到:0 天
[LV.200]无线新星
发表于 2014-7-30 13:48
Routing back

如果你想VPN连接的另一端能够将程序包routing back到本地网络,你需要在VPN服务器添加适当的静态路由,或使用一个更好的解决办法如路由协议。

添加静态路由到pppd服务器,在服务器上使用ip-up和ip-down脚本。

Quagga
OSPF,RIP和其它路由协议都由Quagga提供。人们通常使用OSPF和RIP协议,微软也经常使用。路由协议在pptp连接崩溃时可以用来处理routing table的更新。

排错

如果你无法连接,你可能看到以下提示:
rcvd [CCP ConfReq id=0x1 ]
sent [CCP ConfNak id=0x1 ]
rcvd [LCP TermReq id=0x3 "MPPE required but peer negotiation failed"]
LCP terminated by peer (MPPE required but peer negotiation failed)

你需要添加以下内容到/etc/ppp/options.pptp:
mppe required,no40,no56,stateless

如果你看到以下错误提示:
Received bad configure-ack:  02 06 00 00 00 00 05 06 92 64 55 28

你可能犯了此错误:LCP ConfNak id=0x1 <mru 1500>,修复此错误你需要编辑
/lib/network/pptp.sh

找到文件的最后一行,此处设置了mtu,并将他们删除。

脚本示例

这些示例显示了当一个tunnel上升或下降时如何配置iptable规则。

注意事项:
1.        如果用127退出代码没能完成脚本,那么iptable和route命令以完整路径方式输入。
2.        使用echo完成/var/log/ppp日志
3.        如果无法启用incoming connection,添加iptable规则
4.        依你所需的更改10.0.0.0/8 remote subnet

/etc/ppp/ip-up

#!/bin/sh
# parameters
# $1 the interface name used by pppd (e.g. ppp3)
# $2 the tty device name
# $3 the tty device speed
# $4 the local IP address for the interface
# $5 the remote IP address
# $6 the parameter specified by the 'ipparam' option to pppd

logfile=/var/log/ppp
echo "`date` $0 $1 $2 $3 $4 $5 $6" >> $logfile

case "$6" in
peer-name1)
  A="/usr/sbin/iptables -t filter -I FORWARD -o $1 -j ACCEPT"
  B="/usr/sbin/iptables -t nat -A POSTROUTING -o $1 -j MASQUERADE"
  C="/sbin/route add -net 10.0.0.0 netmask 255.0.0.0 $1"
  $A
  echo " $? $A" >> $logfile
  $B
  echo " $? $B" >> $logfile
  $C
  echo " $? $C" >> $logfile
  ;;
  *)
esac
exit 0


/etc/ppp/ip-down

#!/bin/sh
# parameters
# $1 the interface name used by pppd (e.g. ppp3)
# $2 the tty device name
# $3 the tty device speed
# $4 the local IP address for the interface
# $5 the remote IP address
# $6 the parameter specified by the 'ipparam' option to pppd

logfile=/var/log/ppp
echo "`date` $0 $1 $2 $3 $4 $5 $6" >> $logfile

case "$6" in
peer-name1)
   A="/usr/sbin/iptables -t filter -D FORWARD -o $1 -j ACCEPT"
   B="/usr/sbin/iptables -t nat -D POSTROUTING -o $1 -j MASQUERADE"
   C="/sbin/route del -net 10.0.0.0 netmask 255.0.0.0 $1"
   $A
   echo " $? $A" >> $logfile
   $B
   echo " $? $B" >> $logfile
   $C
   echo " $? $C" >> $logfile
   ;;
  *)
esac
exit 0


问题
如何通过tunnel对确定的某个热点进行路由,并对其它流量使用我常规WAN接口。

使用preouting packet marking和policy routing。例如:
创建一个新的routing table并添加一个规则来使用标记为a1的程序包:
# mkdir /etc/iproute2
# echo 201 table1 >> /etc/iproute2/rt_tables
# ip rule add fwmark 1 table table1
# ip rule ls
0:  from all lookup local
32764:  from all fwmark        1 lookup table1
32766:  from all lookup main
32767:  from all lookup default

在新的表格中设置路由:
# ip route add default dev vlan1 table table1
# ip route list table table1
default via 192.168.0.1 dev vlan1

添加netfilter规则来标记程序包:
# iptables -t mangle -A PREROUTING -p tcp --dport 80 -j MARK --set-mark 1
# iptables -t mangle -L PREROUTING -v
Chain PREROUTING (policy ACCEPT 5543K packets, 3265M bytes)
pkts bytes target     prot opt in     out     source               destination
   20  3924 MARK       tcp  --  any    any     anywhere             anywhere            tcp dpt:80 MARK set 0x1


此iptable的目标扩展也可以进行此操作,但它不在OpenWrt内核。它不存在于任何kmdo-ipt-*程序包。模块被命名为ipt_ROUTE。在此情况下通过PPTP tunnel接口将80端口重新导向至退出:
iptables --append POSTROUTING --table mangle --protocol tcp --dport 80 --jump ROUTE --oif ppp0 --continue



欢迎大家提出自己的想法和意见,可以以回复的形式提出,或者加入我的QQ群大家一起交流,互相学习。
      名   称:openwrt开发
      群   号:  278691630、331230369 、318937037、208461032

web认证请加ApFree群

1399

回帖

1万

积分

1981 小时

在线时间

上校

注册时间
2007-3-9
金币
16049 个
威望
23 个
荣誉
4 个
累计签到:1168 天
连续签到:0 天
[LV.1825]无线元老
发表于 2014-7-30 14:37
login as: root
root@openwrt's password:


BusyBox v1.19.4 (2012-04-30 00:43:59 CST) built-in shell (ash)
Enter 'help' for a list of built-in commands.

  _______                     ________        __
|       |.-----.-----.-----.|  |  |  |.----.|  |_
|   -   ||  _  |  -__|     ||  |  |  ||   _||   _|
|_______||   __|_____|__|__||________||__|  |____|
          |__| W I R E L E S S   F R E E D O M
-----------------------------------------------------
ATTITUDE ADJUSTMENT (Bleeding Edge, r31537)
-----------------------------------------------------
  * 1/4 oz Vodka      Pour all ingredients into mixing
  * 1/4 oz Gin        tin with ice, strain into glass.
  * 1/4 oz Amaretto
  * 1/4 oz Triple sec
  * 1/4 oz Peach schnapps
  * 1/4 oz Sour mix
  * 1 splash Cranberry juice
-----------------------------------------------------
root@OpenWrt:~# opkg update
Downloading http://downloads.openwrt.org/sna ... ckages/Packages.gz.
Inflating http://downloads.openwrt.org/sna ... ckages/Packages.gz.
Updated list of available packages in /var/opkg-lists/attitude_adjustment.
root@OpenWrt:~# opkg install ppp-mod-pptp
Installing ppp-mod-pptp (2.4.6-1) to root...
Downloading http://downloads.openwrt.org/sna ... 2.4.6-1_ar71xx.ipk.
Multiple packages (kmod-ppp and kmod-ppp) providing same name marked HOLD or PREFER. Using latest.
Multiple packages (kmod-ppp and kmod-ppp) providing same name marked HOLD or PREFER. Using latest.
Multiple packages (kmod-ppp and kmod-ppp) providing same name marked HOLD or PREFER. Using latest.
Multiple packages (kmod-crypto-core and kmod-crypto-core) providing same name marked HOLD or PREFER. Using latest.
Multiple packages (kmod-crypto-arc4 and kmod-crypto-arc4) providing same name marked HOLD or PREFER. Using latest.
Multiple packages (kmod-crypto-core and kmod-crypto-core) providing same name marked HOLD or PREFER. Using latest.
Multiple packages (kmod-crypto-core and kmod-crypto-core) providing same name marked HOLD or PREFER. Using latest.
Multiple packages (kmod-crypto-core and kmod-crypto-core) providing same name marked HOLD or PREFER. Using latest.
Multiple packages (kmod-crypto-core and kmod-crypto-core) providing same name marked HOLD or PREFER. Using latest.
Multiple packages (kmod-crypto-core and kmod-crypto-core) providing same name marked HOLD or PREFER. Using latest.
Collected errors:
* satisfy_dependencies_for: Cannot satisfy the following dependencies for ppp-mod-pptp:
*      kernel (= 3.10.49-1-af1880ab00fa0b3125ceefe2ea6ad205) *         kernel (= 3.10.49-1-af1880ab00fa0b3125ceefe2ea6ad205) *         kernel (= 3.10.49-1-af1880ab00fa0b3125ceefe2ea6ad205) *         kernel (= 3.10.49-1-af1880ab00fa0b3125ceefe2ea6ad205) *         kernel (= 3.10.49-1-af1880ab00fa0b3125ceefe2ea6ad205) * kernel (= 3.10.49-1-af1880ab00fa0b3125ceefe2ea6ad205) *         kernel (= 3.10.49-1-af1880ab00fa0b3125ceefe2ea6ad205) *         kernel (= 3.10.49-1-af1880ab00fa0b3125ceefe2ea6ad205) *         kernel (= 3.10.49-1-af1880ab00fa0b3125ceefe2ea6ad205) *         kernel (= 3.10.49-1-af1880ab00fa0b3125ceefe2ea6ad205) *        kernel (= 3.10.49-1-af1880ab00fa0b3125ceefe2ea6ad205) *
* opkg_install_cmd: Cannot install package ppp-mod-pptp.
root@OpenWrt:~# opkg install luci-proto-ppp
Package luci-proto-ppp (trunk+svn8657-1) installed in root is up to date.
root@OpenWrt:~#
ppp-mod-pptp無法安裝,是因為內核不對上嗎?


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册 微信登录

x
难过难过难过难过

141

回帖

2161

积分

139 小时

在线时间

少校

注册时间
2013-10-16
金币
1975 个
威望
0 个
荣誉
0 个
累计签到:192 天
连续签到:0 天
[LV.200]无线新星
发表于 2014-8-5 10:54
sillydanny 发表于 2014-7-30 14:37
ppp-mod-pptp無法安裝,是因為內核不對上嗎?

不好意思,我不是做技术的,如果有问题可以加群,里边高手如云,可以一起切磋~
web认证请加ApFree群

站点统计 | Archiver | 手机版 | 无线门户 ( 粤ICP备11076993号|粤公网安备44010602008359号 ) |网站地图

GMT+8, 2024-4-17 03:39

返回顶部 返回列表