抛開雲主機環境來說,通常一個辦公網絡内所有的主機都沒有公網IP位址,但他們都能通過具有IP位址的路由器(網關)裝置通路Internet,此裝置隻需要具備NAT和轉發功能即可。具有這樣功能的裝置當然可以用某台計算機代替。
下面是一個最簡單的模型:
主機A(服務端):
網卡1:内網IP位址1
網卡2:公網IP位址3或者能通路Internet的某個IP位址3
主機B(用戶端):
網卡1:内網IP位址2
主機B想通過主機A通路Internet,隻需要主機B指定主機A為網關,主機A能夠将來自主機B的包僞裝成主機A上的網卡2上的IP即可(sNAT)。
是以雲主機環境也是一樣,隻要保證兩個雲主機間内網是連通的,另一台雲主機能通路Internet即可。如果某兩個雲主機内網不通,但可以通過vpn連通,也可以實作。
(一)下面是兩個主機間通過内網IP直接連接配接模拟通路Internet的例子。
網卡1:10.20.0.128(eth0,無Internet通路)
網卡2:192.168.1.52(eth1,Internet通路)
網卡1:10.20.0.129(eth0,無Internet通路)
主機A操作:
開啟iptables轉發功能:
sysctl -w net.ipv4.conf.default.accept_source_route=1
sysctl -w net.ipv4.conf.default.rp_filter=0
sysctl -w net.ipv4.ip_forward=1
配置iptables NAT規則:
modprobe iptable_nat
iptables -t nat -A POSTROUTING -s 10.20.0.0/24 -o eth1 -j MASQUERADE
删除iptables拒絕轉發規則:
iptables -D FORWARD -j REJECT --reject-with icmp-host-prohibited
主機B操作:
将預設網關配置成主機A的網卡1位址:
route add -host 10.20.0.128/32 dev eth0
route add default gw 10.20.0.128 dev eth0
(二)下面是兩個主機間通過Open×××連接配接模拟通路Internet的例子。
主機A(服務端,CentOS6.x):
主機B(用戶端,CentOS6.x):
安裝Open×××(安裝Open×××也可以參考《CentOS6.7安裝Open×××服務端》):
yum -y install http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
yum -y install openssl openvpn
cd /etc/openvpn
git clone https://github.com/Open×××/easy-rsa.git
cd /etc/openvpn/easy-rsa/
git checkout -b v2.2.1
cp -r easy-rsa/2.0 /etc/openvpn/easy-rsa/
cd /etc/openvpn/easy-rsa/2.0/
vim im vars
export EASY_RSA="`pwd`"
export OPENSSL="openssl"
export PKCS11TOOL="pkcs11-tool"
export GREP="grep"
export KEY_CONFIG=`$EASY_RSA/whichopensslcnf $EASY_RSA`
export KEY_DIR="$EASY_RSA/keys"
echo NOTE: If you run ./clean-all, I will be doing a rm -rf on $KEY_DIR
export PKCS11_MODULE_PATH="dummy"
export PKCS11_PIN="dummy"
export KEY_SIZE=2048
export CA_EXPIRE=3650
export KEY_EXPIRE=3650
export KEY_COUNTRY="CN"
export KEY_PROVINCE="Shandong"
export KEY_CITY="QingDao"
export KEY_ORG="51devops"
export KEY_EMAIL="[email protected]"
export KEY_OU="Ops"
export KEY_NAME="51devops"
生成Open××× 證書以及key:
source vars
./clean-all
./pkitool --initca
./pkitool --server node1.51devops.com
./build-dh
# ./build-key node1.51devops.com
./build-key node2.51devops.com
chmod 400 /etc/openvpn/easy-rsa/2.0/keys/node1.51devops.com.key
編寫一個Open××× Server端的配置檔案:
vim /etc/openvpn/server.conf
port 1194
proto tcp
dev tun
ca /etc/openvpn/easy-rsa/2.0/keys/ca.crt
cert /etc/openvpn/easy-rsa/2.0/keys/node1.51devops.com.crt
key /etc/openvpn/easy-rsa/2.0/keys/node1.51devops.com.key
dh /etc/openvpn/easy-rsa/2.0/keys/dh2048.pem
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist clientiplist.txt
client-to-client
duplicate-cn
keepalive 10 120
comp-lzo
persist-key
persist-tun
status /var/log/openvpn-status.log
log /var/log/openvpn.log
log-append /var/log/openvpn.log
verb 3
啟動Open×××并配置iptables:
service openvpn start
service openvpn status
ifconfig tun0
cat /var/log/openvpn.log
cat /var/log/openvpn-status.log
iptables -I INPUT -p tcp -m state --state NEW -m tcp --dport 1194 -j ACCEPT
# iptables -I INPUT -m state --state NEW -m udp -p udp --dport 1194 -j ACCEPT
iptables-save || service iptables status
service iptables save
編輯核心參數,啟用轉發功能:
vim /etc/sysctl.conf
net.ipv4.conf.default.accept_source_route = 1
net.ipv4.conf.default.rp_filter = 0
net.ipv4.ip_forward = 1
或者:
sysctl -w net.ipv4.conf.default.accept_source_route=1
sysctl -w net.ipv4.conf.default.rp_filter=0
sysctl -w net.ipv4.ip_forward=1
配置iptables,配置sNAT和FORWARD規則:
modprobe iptable_nat
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth1 -j MASQUERADE
iptables -D FORWARD -j REJECT --reject-with icmp-host-prohibited
service iptables save || iptables-save > /etc/sysconfig/iptables
tips:也可以清空iptables所有配置,再添加允許規則,這樣可以避開一些reject規則。
可以通過iptables -t nat -nL -v指令檢視nat表狀态。
iptables -t nat -A POSTROUTING -s 10.20.0.0/24 -o eth1 -j MASQUERADE
配置主機B(用戶端)
安裝Open×××用戶端:
yum -y install http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
yum -y install openssl openvpn
編輯Open××× Client配置檔案:
vim /etc/openvpn/client.conf
client
dev tun
port 1194
proto tcp
remote 10.20.0.128 1194
resolv-retry infinite
nobind
persist-tun
ca /etc/openvpn/ca.crt
cert /etc/openvpn/node2.51devops.com.crt
key /etc/openvpn/node2.51devops.com.key
remote-cert-tls server
script-security 3
ns-cert-type server
comp-lzo adaptive
verb 3
mute 20
縮小證書檔案的權限,隻允許目前使用者通路,不允許組内其他使用者和其他組通路
chmod 400 /etc/openvpn/node2.51devops.com.key
service openvpn restart
配置路由:
route add -host 10.8.0.1/32 dev tun0
route add default gw 10.8.0.1 dev tun0
測試連接配接:
ping -c4 10.8.0.1
ping -c4 114.114.114.114