moprobe ip_gre
ip tunnel add tun1 mode gre ... ...
来实现,而后面的参数基本上不需要改变。
上面是一个简单的没有任何加密的隧道建立过程,这样通讯可能会带来安全隐患,毕竟我们访问的是内网吗。
下面来给这个隧道加密。
ipsec 是一个复杂的东西,这里只简单的介绍,如果有问题请查阅在线的[url=http://control.cublog.cn/%5C%22http://www.ipsec-howto.org/%5C%22]文档
setkey 是 ipsec 的管理工具,语法类似 setkey -c 然后输入命令,按 ctrl^C 退出。
setkey 中的命令是
add src_ip dst_ip esp SPI -E 3des-cbc \\"password\\";
格式就是这个样子,也比较好理解, 源地址,目的地址,加密头还是数据,安全码(SPI)验证方式,及共享密钥。
下面在 211.167.237.218 上建立 ipsec
setkey -c
flush;
spdflush;
add 211.167.237.218 123.127.177.195 esp 11571 -E 3des-cbc \\"__esp_test_3des_password\\";
add 123.127.177.195 211.167.237.218 esp 11572 -E 3des-cbc \\"__esp_test_3des_password\\";
add 211.167.237.218 123.127.177.195 ah 15071 -A hmac-md5 \\"ah_test_password\\";
add 123.127.177.195 211.167.237.218 ah 15072 -A hmac-md5 \\"ah_test_password\\";
spdadd 211.167.237.218 123.127.177.195 any -P out ipsec
esp/transport/192.168.100.1-192.168.100.250/require
ah/transport/192.168.100.1-192.168.100.250/require;
spdadd 123.127.177.195 211.167.237.218 any -P in ipsec
esp/transport/192.168.200.1-192.168.200.250/require
ah/transport/192.168.200.1-192.168.200.250/require;
^C (ctrl+c)
这样就算配置完成了,你可以通过 setkey -D[P][p] 来检查,或者在 setkey 里使用 dump
为了方便,不用每次都敲一大堆命令,在 123.127.177.195 上写一个启动策略脚本。
#!/bin/bash
#
# chkconfig: 345 15 98
# description: Linux IPsec SA/SP database
#
# Source function library.
. /etc/init.d/functions
start() {
echo -n $\\"ipsec start ... \\"
/etc/setkey.conf && echo -e \\"\\\\33[60G[ \\\\33[32mOK\\\\33[39m ]\\"
}
case \\"$1\\" in
start)
start
;;
stop)
echo -n \\"flush;spdflush;\\" | \\\\
setkey -c && echo -e \\"ipsec stoping ... \\\\33[60G[ \\\\33[32mOK\\\\33[39m ]\\"
;;
reload)
$0 stop
$0 start
;;
*)
echo $\\"Usage: $0 {start|stop|reload}\\"
exit 1
esac
exit $?
# cat setkey.conf
#!/sbin/setkey -f
flush;
spdflush;
# ESP
add 211.167.237.218 123.127.177.195 esp 11571 -E 3des-cbc \\"__esp_test_3des_password\\";
add 123.127.177.195 211.167.237.218 esp 11572 -E 3des-cbc \\"__esp_test_3des_password\\";
# AH
add 211.167.237.218 123.127.177.195 ah 15071 -A hmac-md5 \\"ah_test_password\\";
add 123.127.177.195 211.167.237.218 ah 15072 -A hmac-md5 \\"ah_test_password\\";
# POLICY
add 123.127.177.195 211.167.237.218 ah 15072 -A hmac-md5 \\"ah_test_password\\";
spdadd 211.167.237.218 123.127.177.195 any -P in ipsec
esp/transport/192.168.100.1-192.168.100.250/require
ah/transport/192.168.100.1-192.168.100.250/require;
spdadd 123.127.177.195 211.167.237.218 any -P out ipsec
esp/transport/192.168.200.1-192.168.200.250/require
ah/transport/192.168.200.1-192.168.200.250/require;
接下来我们就运行 ipsec.sh start 就能启动 ipsec 了,如果想停止就运行 ipsec.sh stop
或者你还可以吧 ipsec 拷贝到 /etc/init.d/ipsec 然后运行 chkconfig --add ipsec 让他作为服务,开机就启动。
可能细心的读者已经发现在两个服务器上的脚本略有不同,实际就是把 Policy 里面的 in 和 out 对换一下,然后写上本地子网就可以了。
上面是一个简单的隧道建立过程,下面我们来个复杂一点的,也是我们常碰到的结构。
图2
---------- ------------- ------------ ---------------- -------
| client | | nat server| | internet | | Linux server | | Lan |
---------- ------------- ------------ ---------------- -------
|client ip 192.168.100.100/24 gateway 192.168.100.254 |
|nat server: lan_ip 192.168.100.254/24 wan_ip 123.119.206.165 |
|Linux server: lan_ip eth0 192.168.200.100/24 wan_ip eth1 123.127.177.210 |
|--------------------------------------------------------------------------------|
这个结构比较麻烦了,因为我们的源地址会被改写一次,这个该如何配置呢。
实际上在linux上配置这个也很简单,只要遵循原则,看见谁,就写谁的方法就没有问题。
比如在我们客户机上看见的一定是 由我们本地的ip(伪)到远程服务器的ip(实),而远程服务器看到的情况却有点不一样,服务器看到的是,客户机经过nat后的ip(实),和本机ip(实)在通讯,根据这个原则,我们写出如下命令。
A:client
modprobe ip_gre
ip tunnel add tun2 mode gre remote 123.127.177.210 local 192.168.100.100 ttl 64
ip link set tun2 mtu 1480 up
ip address add 192.168.200.253 brd 255.255.255.255 peer 123.127.177.210 dev tun2
B:Server
modprobe ip_gre
ip tunnel add tun2 mode gre remote 123.119.206.165 local 123.127.177.210 ttl 64
ip link set tun2 mtu 1480 up
ip address add 192.168.100.253 brd 255.255.255.255 peer 123.119.206.165 dev tun2
这样隧道就建立起来了。moprobe ip_gre
ip tunnel add tun1 mode gre ... ...
来实现,而后面的参数基本上不需要改变。
上面是一个简单的没有任何加密的隧道建立过程,这样通讯可能会带来安全隐患,毕竟我们访问的是内网吗。
下面来给这个隧道加密。
ipsec 是一个复杂的东西,这里只简单的介绍,如果有问题请查阅在线的[url=http://control.cublog.cn/%5C%22http://www.ipsec-howto.org/%5C%22]文档
setkey 是 ipsec 的管理工具,语法类似 setkey -c 然后输入命令,按 ctrl^C 退出。
setkey 中的命令是
add src_ip dst_ip esp SPI -E 3des-cbc \\"password\\";
格式就是这个样子,也比较好理解, 源地址,目的地址,加密头还是数据,安全码(SPI)验证方式,及共享密钥。
下面在 211.167.237.218 上建立 ipsec
setkey -c
flush;
spdflush;
add 211.167.237.218 123.127.177.195 esp 11571 -E 3des-cbc \\"__esp_test_3des_password\\";
add 123.127.177.195 211.167.237.218 esp 11572 -E 3des-cbc \\"__esp_test_3des_password\\";
add 211.167.237.218 123.127.177.195 ah 15071 -A hmac-md5 \\"ah_test_password\\";
add 123.127.177.195 211.167.237.218 ah 15072 -A hmac-md5 \\"ah_test_password\\";
spdadd 211.167.237.218 123.127.177.195 any -P out ipsec
esp/transport/192.168.100.1-192.168.100.250/require
ah/transport/192.168.100.1-192.168.100.250/require;
spdadd 123.127.177.195 211.167.237.218 any -P in ipsec
esp/transport/192.168.200.1-192.168.200.250/require
ah/transport/192.168.200.1-192.168.200.250/require;
^C (ctrl+c)
这样就算配置完成了,你可以通过 setkey -D[P][p] 来检查,或者在 setkey 里使用 dump
为了方便,不用每次都敲一大堆命令,在 123.127.177.195 上写一个启动策略脚本。
#!/bin/bash
#
# chkconfig: 345 15 98
# description: Linux IPsec SA/SP database
#
# Source function library.
. /etc/init.d/functions
start() {
echo -n $\\"ipsec start ... \\"
/etc/setkey.conf && echo -e \\"\\\\33[60G[ \\\\33[32mOK\\\\33[39m ]\\"
}
case \\"$1\\" in
start)
start
;;
stop)
echo -n \\"flush;spdflush;\\" | \\\\
setkey -c && echo -e \\"ipsec stoping ... \\\\33[60G[ \\\\33[32mOK\\\\33[39m ]\\"
;;
reload)
$0 stop
$0 start
;;
*)
echo $\\"Usage: $0 {start|stop|reload}\\"
exit 1
esac
exit $?
# cat setkey.conf
#!/sbin/setkey -f
flush;
spdflush;
# ESP
add 211.167.237.218 123.127.177.195 esp 11571 -E 3des-cbc \\"__esp_test_3des_password\\";
add 123.127.177.195 211.167.237.218 esp 11572 -E 3des-cbc \\"__esp_test_3des_password\\";
# AH
add 211.167.237.218 123.127.177.195 ah 15071 -A hmac-md5 \\"ah_test_password\\";
add 123.127.177.195 211.167.237.218 ah 15072 -A hmac-md5 \\"ah_test_password\\";
# POLICY
add 123.127.177.195 211.167.237.218 ah 15072 -A hmac-md5 \\"ah_test_password\\";
spdadd 211.167.237.218 123.127.177.195 any -P in ipsec
esp/transport/192.168.100.1-192.168.100.250/require
ah/transport/192.168.100.1-192.168.100.250/require;
spdadd 123.127.177.195 211.167.237.218 any -P out ipsec
esp/transport/192.168.200.1-192.168.200.250/require
ah/transport/192.168.200.1-192.168.200.250/require;
接下来我们就运行 ipsec.sh start 就能启动 ipsec 了,如果想停止就运行 ipsec.sh stop
或者你还可以吧 ipsec 拷贝到 /etc/init.d/ipsec 然后运行 chkconfig --add ipsec 让他作为服务,开机就启动。
可能细心的读者已经发现在两个服务器上的脚本略有不同,实际就是把 Policy 里面的 in 和 out 对换一下,然后写上本地子网就可以了。
上面是一个简单的隧道建立过程,下面我们来个复杂一点的,也是我们常碰到的结构。
图2
---------- ------------- ------------ ---------------- -------
| client | | nat server| | internet | | Linux server | | Lan |
---------- ------------- ------------ ---------------- -------
|client ip 192.168.100.100/24 gateway 192.168.100.254 |
|nat server: lan_ip 192.168.100.254/24 wan_ip 123.119.206.165 |
|Linux server: lan_ip eth0 192.168.200.100/24 wan_ip eth1 123.127.177.210 |
|--------------------------------------------------------------------------------|
这个结构比较麻烦了,因为我们的源地址会被改写一次,这个该如何配置呢。
实际上在linux上配置这个也很简单,只要遵循原则,看见谁,就写谁的方法就没有问题。
比如在我们客户机上看见的一定是 由我们本地的ip(伪)到远程服务器的ip(实),而远程服务器看到的情况却有点不一样,服务器看到的是,客户机经过nat后的ip(实),和本机ip(实)在通讯,根据这个原则,我们写出如下命令。
A:client
modprobe ip_gre
ip tunnel add tun2 mode gre remote 123.127.177.210 local 192.168.100.100 ttl 64
ip link set tun2 mtu 1480 up
ip address add 192.168.200.253 brd 255.255.255.255 peer 123.127.177.210 dev tun2
B:Server
modprobe ip_gre
ip tunnel add tun2 mode gre remote 123.119.206.165 local 123.127.177.210 ttl 64
ip link set tun2 mtu 1480 up
ip address add 192.168.100.253 brd 255.255.255.255 peer 123.119.206.165 dev tun2
这样隧道就建立起来了。moprobe ip_gre