在openwrt路由中加入n2n,并在ubuntu里加入n2n服务,实现开机联网互通互访
在openwrt路由中加入n2n,并在ubuntu里加入n2n服务,实现开机联网互通互访
1、openwrt的硬件环境:
将自己的WR703N刷入openwrt(这里需要修改FLASH芯片,换个8M的FLASH);
刷机后,安装openwrt,此教程网上一大堆,无需说明了,TELNET进入,并开启SSH后,root登陆。
2、安装n2n到openwrt中:
root@LeeKwen:~# opkg update <-----如果不能升级,请运行下条命令,查看源是否正确:root@LeeKwen:~# cat /etc/opkg.conf
root@LeeKwen:~# opkg install n2n
运行上述命令即可安装n2n。
3、修改n2n的配置文件:
root@LeeKwen:~# cat /etc/config/n2n config edge option ipaddr '10.10.100.191' option supernode '106.186.30.16' option port '9876' option community 'leekwen' option key 'leekwen' option route '1'
4、修改n2n服务的启动脚本:
root@LeeKwen:~# vi /etc/init.d/n2n #!/bin/sh /etc/rc.common # Copyright (C) 2008-2012 OpenWrt.org START=90 start_instance() { local cfg="$1" config_get type "$cfg" TYPE case "$type" in edge) config_get ipaddr "$cfg" 'ipaddr' [ -n "$ipaddr" ] || return 1 config_get supernode "$cfg" 'supernode' config_get port "$cfg" 'port' config_get community "$cfg" 'community' config_get key "$cfg" 'key' config_get_bool route "$cfg" 'route' '0' [ "$route" = "1" ] && args='-r' service_start /usr/sbin/edge -f $args -a $ipaddr -c $community -k $key -l ${supernode}:${port} -M 1300 ;; supernode) config_get port "$cfg" port [ -n "$port" ] || return 1 service_start /usr/sbin/supernode -l $port ;; esac } stop_instance() { local cfg="$1" config_get type "$cfg" TYPE case "$type" in edge) service_stop /usr/sbin/edge ;; supernode) service_stop /usr/sbin/supernode ;; esac } start() { config_load 'n2n' config_foreach start_instance 'edge' config_foreach start_instance 'supernode' } stop() { config_load 'n2n' config_foreach stop_instance 'edge' config_foreach stop_instance 'supernode' }
5、将n2n加入openwrt系统启动项:
root@LeeKwen:~# /etc/init.d/n2n enable6、启动openwrt中的n2n服务:
root@LeeKwen:~# /etc/init.d/n2n startroot@LeeKwen:~# ifconfig edge0 edge0 Link encap:Ethernet HWaddr 86:CC:1B:E9:1A:DC inet addr:10.10.100.191 Bcast:10.10.100.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1300 Metric:1 RX packets:1117 errors:0 dropped:22 overruns:0 frame:0 TX packets:698 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:500 RX bytes:104415 (101.9 KiB) TX bytes:98732 (96.4 KiB)
7、互通测试:与我的手机端 n2n互ping下
root@LeeKwen:~# ping 10.10.100.103 PING 10.10.100.103 (10.10.100.103): 56 data bytes 64 bytes from 10.10.100.103: seq=0 ttl=64 time=31.738 ms 64 bytes from 10.10.100.103: seq=1 ttl=64 time=25.347 ms 64 bytes from 10.10.100.103: seq=2 ttl=64 time=22.565 ms 64 bytes from 10.10.100.103: seq=3 ttl=64 time=40.063 ms 64 bytes from 10.10.100.103: seq=4 ttl=64 time=23.577 ms ^C --- 10.10.100.103 ping statistics --- 6 packets transmitted, 5 packets received, 16% packet loss round-trip min/avg/max = 22.565/19.838/31.738 ms
在ubuntu系统中增加n2n服务:
1、我已经在上篇博客中有写如何在ubuntu安装n2n
(未安装过的用户请移驾http://blog.csdn.net/leekwen/article/details/45095887)
这里只说明增加n2n开机服务,具体步骤如下:
Leekwen@Leekwen:~$ svn co https://svn.ntop.org/svn/ntop/trunk/n2n Leekwen@Leekwen:~$ cd n2n/ Leekwen@Leekwen:~/n2n$ ls n2n_v1 n2n_v2 Leekwen@Leekwen:~/n2n$ cd n2n_v1/ Leekwen@Leekwen:~/n2n/n2n_v1$ ls COPYING edge.8 HACKING lzoconf.h Makefile minilzo.h n2n.h openwrt scripts supernode.c tuntap_linux.c twofish.c win32 debian edge.c INSTALL lzodefs.h minilzo.c n2n.c n2n.spec README supernode.1 tuntap_freebsd.c tuntap_osx.c twofish.h Leekwen@Leekwen:~/n2n/n2n_v1$ make Leekwen@Leekwen:~/n2n/n2n_v1$ ./edge -h Welcome to n2n v.1.3.2 for i686 Built on 04/23/15 06:11:56 PM Copyright 2007-08 - http://www.ntop.org edge -d <tun device> -a <tun IP address> -c <community> -k <encrypt key> -s <netmask> [-u <uid> -g <gid>][-f][-m <MAC address>] -l <supernode host:port> [-p <local port>] [-M <mtu>] [-t] [-r] [-v] [-b] [-h] -d <tun device> | tun device name -a <tun IP address> | n2n IP address -c <community> | n2n community name -k <encrypt key> | Encryption key (ASCII) - also N2N_KEY=<encrypt key> -s <netmask> | Edge interface netmask in dotted decimal notation (255.255.255.0) -l <supernode host:port> | Supernode IP:port -b | Periodically resolve supernode IP | (when supernodes are running on dynamic IPs) -p <local port> | Local port used for connecting to supernode -u <UID> | User ID (numeric) to use when privileges are dropped -g <GID> | Group ID (numeric) to use when privileges are dropped -f | Fork and run as a daemon. Use syslog. -m <MAC address> | Choose a MAC address for the TAP interface | eg. -m 01:02:03:04:05:06 -M <mtu> | Specify n2n MTU (default 1400) -t | Use http tunneling (experimental) -r | Enable packet forwarding through n2n community -v | Verbose Environment variables: N2N_KEY | Encryption key (ASCII) Leekwen@Leekwen:~/n2n/n2n_v1$ pwd /home/Leekwen/n2n/n2n_v1
2、下载并编译完毕后,编写启动服务文件n2n:
Leekwen@Leekwen:~/n2n/n2n_v1$ vi n2n#!/bin/bash ##Some Variable define here ## PROG="edge" n2n_IP="10.10.100.103" n2n_cname="leekwen" n2n_pass="leekwen" SNODE_Host="106.186.30.16" SNODE_Port="9876" LOGS="/var/log/$PROG.log" PROG_PATH="/home/leekwen/n2n/n2n_v1" # edge binary put on here for testing this script, Not Needed if the system binary. PROG_ARGS="-f -d edge0 -a $n2n_IP -c $n2n_cname -k $n2n_pass -l $SNODE_Host:$SNODE_Port -M 1300" PID_PATH="/var/run" RETVAL=0 start() { pid=`ps ax | grep $PROG | grep -v "grep" | awk '{print $1}'` if [ ! -z "$pid" ]; then ## Program is running, exit with error. echo "Error! $PROG is currently running!" 1>&2 exit 1 else ## Change from /dev/null to something like /var/log/$PROG if you want to save output. $PROG_PATH/$PROG $PROG_ARGS 2>&1 > $LOGS & echo "$PROG started" echo $pid > "$PID_PATH/$PROG.pid" fi RETVAL=$? if [ $RETVAL -eq 0 ]; then echo -e "\\033[60G\c" echo -e "[ \\033[1;32m\c" echo -e "OK\c" echo -e "\\033[0;39m\c" echo " ]" else echo -e "\\033[60G\c" echo -e "[ \\033[1;31m\c" echo -e "FAILED\c" echo -e "\\033[0;39m\c" echo " ]" fi return $RETVAL } stop() { pid=`ps ax | grep $PROG | grep -v "grep"| awk '{print $1}'` if [ ! -z "$pid" ]; then ## Program is running, so stop it kill $pid rm -f "$PID_PATH/$PROG.pid" echo "$PROG stopped" else ## Program is not running, exit with error. echo "Error! $PROG not started!" 1>&2 exit 1 fi RETVAL=$? if [ $RETVAL -eq 0 ]; then echo -e "\\033[60G\c" echo -e "[ \\033[1;32m\c" echo -e "OK\c" echo -e "\\033[0;39m\c" echo " ]" else echo -e "\\033[60G\c" echo -e "[ \\033[1;31m\c" echo -e "FAILED\c" echo -e "\\033[0;39m\c" echo " ]" fi return $RETVAL } ## Check to see if we are running as root first. ## Found at http://www.cyberciti.biz/tips/shell-root-user-check-script.html if [ "$(id -u)" != "0" ]; then echo "This script must be run as root, you can use sudo command to run it." 1>&2 exit 1 fi case "$1" in start) start exit 0 ;; stop) stop exit 0 ;; reload|restart|force-reload) stop start exit 0 ;; **) echo "Usage: $0 {start|stop|reload}" 1>&2 exit 1 ;; esac
3、增加可执行权限,移动n2n服务到/etc/init.d/,并更新rc.d
Leekwen@Leekwen:~/n2n/n2n_v1$ chmod 755 n2n Leekwen@Leekwen:~/n2n/n2n_v1$ sudo mv n2n /etc/init.d/ Leekwen@Leekwen:~/n2n/n2n_v1$ sudo update-rc.d n2n defaults
4、对n2n服务进行测试:
Leekwen@Leekwen:~/n2n/n2n_v1$ /etc/init.d/n2n start Leekwen@Leekwen:~/n2n/n2n_v1$ ifconfig edge0 Leekwen@Leekwen:~/n2n/n2n_v1$ /etc/init.d/n2n stop Leekwen@Leekwen:~/n2n/n2n_v1$ ifconfig edge0 Leekwen@Leekwen:~/n2n/n2n_v1$ /etc/init.d/n2n restart Leekwen@Leekwen:~/n2n/n2n_v1$ ifconfig edge0
5、对n2n服务进行Ping连通性测试:
Leekwen@Leekwen:~/n2n/n2n_v1$ ping 10.10.100.103 PING 10.10.100.103 (10.10.100.103): 56 data bytes 64 bytes from 10.10.100.103: seq=0 ttl=64 time=11.738 ms 64 bytes from 10.10.100.103: seq=1 ttl=64 time=15.347 ms 64 bytes from 10.10.100.103: seq=2 ttl=64 time=12.565 ms 64 bytes from 10.10.100.103: seq=3 ttl=64 time=10.063 ms 64 bytes from 10.10.100.103: seq=4 ttl=64 time=13.577 ms ^C --- 10.10.100.103 ping statistics --- 5 packets transmitted, 5 packets received, 0% packet loss round-trip min/avg/max = 10.063/12.838/15.347 ms
到此客户端的已经安装成功,在网络连接的情况下,每次重启ubuntu及openwrt路由后,他们都会自动连接上supernode节点,以构建一个p2p的网络。
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。