when CLIENT_ACCEPTED {
set hsl [HSL::open -proto UDP -pool syslog]
set saddr [IP::remote_addr]
set sport [TCP::client_port]
}
when SERVER_CONNECTED {
set Bsaddr [IP::local_addr]
set Bsport [TCP::local_port]
set serveraddr [IP::remote_addr]
set currenttime [clock seconds]
HSL::send $hsl "$currenttime,$saddr,$sport,$Bsaddr,$Bsport,$serveraddr"
# log local0. "$currenttime,$saddr,$sport,$Bsaddr,$Bsport,$serveraddr"
}
.....
set hsl [HSL::open -proto UDP -pool syslog]
set hsl2 [HSL::open -proto UDP -pool syslog2]
.....
HSL::send $hsl "$currenttime,$saddr,$sport,$Bsaddr,$Bsport,$serveraddr"
HSL::send $hsl2 "$currenttime,$saddr,$sport,$Bsaddr,$Bsport,$serveraddr"
.....
when CLIENT_ACCEPTED {
if { [active_members syslog] > 0 } {
set hsl [HSL::open -proto UDP -pool syslog]
} elseif { [active_members syslog2] > 0 } {
set hsl [HSL::open -proto UDP -pool syslog2]
}
.....
root@cookbook2(Active)(tmos)# modify sys config-sync auto-detect enabled
root@cookbook2(Active)(tmos)# list sys config-sync auto-detect enabled
sys config-sync {
auto-detect enabled
}
root@cookbook2(Active)(tmos)# run sys config-sync
Checking configuration on local system and peer system...
Peer's IP address: 10.10.40.252
Synchronizing Master Keys...
Saving active configuration...
Configsync Mode: Push
Transferring UCS to peer...
Installing UCS on peer...
Obtaining results of remote configuration installation...
Saving active configuration...
Current configuration backed up to /var/local/ucs/cs_backup.ucs.
Product : BIG-IP
Version : 10.2.0
Hostname: UCS : cookbook2.example.com
System: cookbook.example.com
Installing --shared-- configuration on host cookbook.example.com
Installing configuration...
Post-processing...
Reading configuration from /config/low_profile_base.conf.
Reading configuration from /defaults/config_base.conf.
Reading configuration from /config/bigip_sys.conf.
Reading configuration from /config/bigip_base.conf.
Reading configuration from /usr/share/monitors/base_monitors.conf.
Reading configuration from /config/profile_base.conf.
Reading configuration from /config/daemon.conf.
Reading configuration from /config/bigip.conf.
Reading configuration from /config/bigip_local.conf.
Loading the configuration ...
root@cookbook2(Active)(tmos)# sh sys config-sync
CONFIG SYNC STATUS --
Status 2 - Peer config modified, recommend configsync from peer
Last change (Self) 2010-08-18 16:09:27
Last change (Peer) 2010-08-18 16:10:48
Last Configsync 2010-08-18 16:10:03
root@cookbook2(Active)(tmos)# sh sys config-sync
CONFIG SYNC STATUS --
Status 0 - Synchronized
Last change (Self) 2010-08-18 16:09:27
Last change (Peer) 2010-08-18 16:17:04
Last Configsync 2010-08-18 16:17:04
rule sry2 {
when HTTP_REQUEST {
set uri [HTTP::uri]
if { [ active_members httppool ] < 1 }{
switch -- $uri {
"/logo.png" {
HTTP::respond 200 content [b64decode [class element -value 1 maint_index_html]] "Content-Type" "image/png"
}
default {
HTTP::respond 200 content [class element -value 0 maint_index_html] "Content-Type" "text/html"
}
}
return
}
}
class maint_index_html {
type string
filename "/config/srycontent"
mode read
separator ":="
}
[root@bigip1:Active] config # cat srycontent
"/maint.html" := "<html><head><title>Maintenance page</title></head><body><p><h2>ただいまサービス停止中です</h2><img src=/logo.png></body></html>",
"/logo.png" := "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",
root@bigip1(Active)(tmos)# list ltm virtual httpVS
ltm virtual httpVS {
destination x.x.x.x:http
ip-protocol tcp
mask 255.255.255.255
pool httppool
profiles {
http-caching { }
tcp { }
}
rules {
sry3
}
snat automap
}
root@bigip1(Active)(tmos)# list ltm virtual SRY-VS
ltm virtual SRY-VS {
destination 9.9.9.9:http
ip-protocol tcp
mask 255.255.255.255
profiles {
http { }
tcp { }
}
rules {
sry4
}
}
root@jpn223(Active)(tmos)# list ltm rule sry3
ltm rule sry3 {
when HTTP_REQUEST {
if { [ active_members httppool ] < 1 }{
CACHE::enable
virtual SRY-VS
} else {
CACHE::disable
}
}
}
root@bigip1(Active)(tmos)# list ltm rule sry4
ltm rule sry4 {
when HTTP_REQUEST {
set uri [HTTP::uri]
switch -- $uri {
"/logo.png" {
HTTP::respond 200 content [b64decode [class element -value 1 maint_index_html]] "Content-Type" "image/png"
}
default {
HTTP::respond 200 content [class element -value 0 maint_index_html] "Content-Type" "text/html"
}
}
return
}
}
]]><![CDATA[ ]]>ltm rule sry3 {
when CLIENT_ACCEPTED {
if { [ active_members httppool ] < 1 }{
virtual SRY-VS
}
}
}
root@cookbook(Active)(tmos)# list ltm virtual
ltm virtual HTTP-VS-IPv4 {
destination 10.10.88.21:http
ip-protocol tcp
mask 255.255.255.255
pool http-pool1
profiles {
http { }
tcp { }
}
}
root@cookbook(Active)(tmos)# list ltm pool http-pool1
ltm pool http-pool1 {
members {
10.10.40.40:http {
session monitor-enabled
}
10.10.40.41:http {
session monitor-enabled
}
}
monitor gateway_icmp
}
root@cookbook2(Active)(tmos)# create ltm virtual HTTP-VS-IPv6 { destination fd00:10:10:88::21.http ip-protocol tcp mask ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff pool http-pool1 profiles add { http { } tcp { } } }
root@cookbook(Active)(tmos)# list ltm virtual
ltm virtual HTTP-VS-IPv4 {
destination 10.10.88.21:http
ip-protocol tcp
mask 255.255.255.255
pool http-pool1
profiles {
http { }
tcp { }
}
}
ltm virtual HTTP-VS-IPv6 {
destination fd00:10:10:88::21.http
ip-protocol tcp
pool http-pool1
profiles {
http { }
tcp { }
}
}
$ curl -g http://[fd00:10:10:88::21]/env.php
Destination IP Address:Port -> 10.10.40.41:80
Source IP Address:Port -> 10.10.40.254:56801
X-Forwarded-For ->
root@cookbook(Active)(tmos)# create ltm snatpool internalSNATPool members add { 10.10.40.201 10.10.40.202 10.10.40.203 }
root@cookbook(Active)(tmos)# modify ltm virtual HTTP-VS-IPv6 snatpool internalSNATPool
root@cookbook(Active)(tmos)# create ltm profile http http1 insert-xforwarded-for enabled
root@cookbook(Active)(tmos)# modify ltm virtual HTTP-VS-IPv6 profiles replace-all-with { http1 { } }
root@cookbook(Active)(tmos)# list ltm virtual HTTP-VS-IPv6 ltm virtual HTTP-VS-IPv6 {
destination fd00:10:10:88::21.http
ip-protocol tcp
pool http-pool1
profiles {
http1 { }
tcp { }
}
snatpool internalSNATPool
}
]]><![CDATA[ ]]>$ curl -g http://[fd00:10:10:88::21]/env.php
Destination IP Address:Port -> 10.10.40.41:80
Source IP Address:Port -> 10.10.40.201:46568
X-Forwarded-For -> fd00:10:20::20
$ ip ad show dev eth3
5: eth3:mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:96:70:d7 brd ff:ff:ff:ff:ff:ff
inet 10.20.0.254/24 brd 10.20.0.255 scope global eth3
inet6 fd00:10:20::254/64 scope global
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fe96:70d7/64 scope link
valid_lft forever preferred_lft forever
$ ip ad show dev eth7
9: eth7:mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:96:70:ff brd ff:ff:ff:ff:ff:ff
inet 10.10.88.250/24 brd 10.10.88.255 scope global eth7
inet6 fd00:10:10:88::250/64 scope global
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fe96:70ff/64 scope link
valid_lft forever preferred_lft forever
2号機root@cookbook(Standby)(tmos)# create net self fd00:10:10:88::252/64 vlan external
root@cookbook(Standby)(tmos)# create net self fd00:10:10:88::254/64 vlan external floating enabled unit 1
root@cookbook2(Active)(tmos)# create net self fd00:10:10:88::253/64 vlan external
root@cookbook2(Active)(tmos)# create net self fd00:10:10:88::254/64 vlan external floating enabled unit 2
root@cookbook2(Active)(tmos)# create net route default-inet6 gw fe80::20c:29ff:fe96:70ff interface external
root@cookbook2(Active)(tmos)# run sys config-sync
root@cookbook(Active)(tmos)# list ltm profile http http1
ltm profile http http1 {
defaults-from http
header-insert "X-SSL: 1"
}
ltm virtual httpsVS {
destination 10.10.88.21:https
ip-protocol tcp
mask 255.255.255.255
pool httppool
profiles {
clientssl {
context clientside
}
http1 { }
tcp { }
}
snat automap
}
root@cookbook(Active)(tmos)# list ltm virtual httpVS
ltm virtual httpVS {
destination 10.10.88.21:http
ip-protocol tcp
mask 255.255.255.255
pool httppool
profiles {
http { }
tcp { }
}
snat automap
}
# cat env_al.php
<?php
foreach ($_SERVER as $key => $val)
{
print "\n";
print "$key -> ";
print "$val";
}
print "\n\n\n";
?>
次にHTTPSのVSにアクセスしてみます。$ curl http://10.10.88.21/env_al.php
HTTP_USER_AGENT -> curl/7.18.2 (x86_64-pc-linux-gnu) libcurl/7.18.2 OpenSSL/0.9.8g zlib/1.2.3.3 libidn/1.10
HTTP_HOST -> 10.10.88.21
HTTP_ACCEPT -> */*
PATH -> /usr/local/bin:/usr/bin:/bin
SERVER_SIGNATURE -> Apache/2.2.11 (Ubuntu) PHP/5.2.6-3ubuntu4.5 with Suhosin-Patch Server at 10.10.88.21 Port 80
SERVER_SOFTWARE -> Apache/2.2.11 (Ubuntu) PHP/5.2.6-3ubuntu4.5 with Suhosin-Patch
SERVER_NAME -> 10.10.88.21
SERVER_ADDR -> 10.10.40.40
SERVER_PORT -> 80
REMOTE_ADDR -> 10.10.40.252
DOCUMENT_ROOT -> /var/www
SERVER_ADMIN -> webmaster@localhost
SCRIPT_FILENAME -> /var/www/env_al.php
REMOTE_PORT -> 57457
GATEWAY_INTERFACE -> CGI/1.1
SERVER_PROTOCOL -> HTTP/1.1
REQUEST_METHOD -> GET
QUERY_STRING ->
REQUEST_URI -> /env_al.php
SCRIPT_NAME -> /env_al.php
PHP_SELF -> /env_al.php
REQUEST_TIME -> 1273465320
argv -> Array
argc -> 0
$ curl -k https://10.10.88.21/env_al.php
HTTP_USER_AGENT -> curl/7.18.2 (x86_64-pc-linux-gnu) libcurl/7.18.2 OpenSSL/0.9.8g zlib/1.2.3.3 libidn/1.10
HTTP_HOST -> 10.10.88.21
HTTP_ACCEPT -> */*
HTTP_X_SSL -> 1
PATH -> /usr/local/bin:/usr/bin:/bin
SERVER_SIGNATURE -> Apache/2.2.11 (Ubuntu) PHP/5.2.6-3ubuntu4.5 with Suhosin-Patch Server at 10.10.88.21 Port 80
SERVER_SOFTWARE -> Apache/2.2.11 (Ubuntu) PHP/5.2.6-3ubuntu4.5 with Suhosin-Patch
SERVER_NAME -> 10.10.88.21
SERVER_ADDR -> 10.10.40.40
SERVER_PORT -> 80
REMOTE_ADDR -> 10.10.40.252
DOCUMENT_ROOT -> /var/www
SERVER_ADMIN -> webmaster@localhost
SCRIPT_FILENAME -> /var/www/env_al.php
REMOTE_PORT -> 45476
GATEWAY_INTERFACE -> CGI/1.1
SERVER_PROTOCOL -> HTTP/1.1
REQUEST_METHOD -> GET
QUERY_STRING ->
REQUEST_URI -> /env_al.php
SCRIPT_NAME -> /env_al.php
PHP_SELF -> /env_al.php
REQUEST_TIME -> 1273465344
argv -> Array
argc -> 0
root@bigiplab(Active)(tmos)# list ltm virtual
ltm virtual http-vs1 {
connection-limit 1
destination 10.10.30.9:http
ip-protocol tcp
mask 255.255.255.255
pool http-pool
profiles {
http { }
tcp { }
}
}
root@bigiplab(Active)(tmos)# sh ltm virtual-address 10.10.30.9
Ltm::Virtual Address: 10.10.30.9
-------------------------------------------------
Status
Availability : available
State : enabled
Reason : The virtual address is available
Traffic ClientSide
Bits In 79.6K
Bits Out 79.6K
Packets In 137
Packets Out 107
Current Connections 0
Maximum Connections 3
Total Connections 29
root@bigiplab(Active)(tmos)# sh ltm virtual http-vs1
Ltm::Virtual Server: http-vs1
---------------------------------------------------------
Status
Availability : available
State : enabled
Reason : The virtual server is available
CMP : enabled
CMP Mode : all-cpus
Traffic ClientSide Ephemeral General
Bits In 58.9K 0 -
Bits Out 63.2K 0 -
Packets In 102 0 -
Packets Out 80 0 -
Current Connections 0 0 -
Maximum Connections 2 0 -
Total Connections 21 0 -
Min Conn Duration/msec - - 6
Max Conn Duration/msec - - 303.2K
Mean Conn Duration/msec - - 24.1K
Total Requests - - 14
root@bigiplab(Active)(tmos)# sh ltm pool http-pool
Ltm::Pool: http-pool
--------------------------------------
Status
Availability : available
State : enabled
Reason : The pool is available
Traffic ServerSide
Bits In 37.3K
Bits Out 52.0K
Packets In 64
Packets Out 43
Current Connections 0
Maximum Connections 2
Total Connections 15
root@bigiplab(Active)(tmos)# sh ltm pool http-pool members
Ltm::Pool: http-pool
--------------------------------------
Status
Availability : available
State : enabled
Reason : The pool is available
Traffic ServerSide
Bits In 37.3K
Bits Out 52.0K
Packets In 64
Packets Out 43
Current Connections 0
Maximum Connections 2
Total Connections 15
Ltm::Pool Member: http-pool 10.10.40.40:80
-------------------------------------------
Status
Availability : available
State : enabled
Reason : Pool member is available
Traffic ServerSide General
Bits In 37.3K -
Bits Out 52.0K -
Packets In 64 -
Packets Out 43 -
Current Connections 0 -
Maximum Connections 2 -
Total Connections 15 -
Total Requests - 10
root@bigiplab(Active)(tmos)# sh ltm node 10.10.40.40
Ltm::Node: 10.10.40.40
--------------------------------------------------------------------
Status
Availability : unknown
State : enabled
Reason : Node address does not have service checking enabled
Traffic ServerSide General
Bits In 37.3K -
Bits Out 52.0K -
Packets In 64 -
Packets Out 43 -
Current Connections 0 -
Maximum Connections 2 -
Total Connections 15 -
Total Requests - 10
root@bigiplab(Active)(tmos)# sh ltm profile http http
Ltm::HTTP Profile: http
-------------------------------------------------------------
Requests
GET 15
POST 0
Version 0.9 0
Version 1.0 0
Version 1.1 15
Maximum Per Connection 1
Total 15
Responses
Successful 7
Redirection 0
Client-Errors 3
Server-Errors 0
Version 0.9 0
Version 1.0 0
Version 1.1 10
Response Size
Under 1K 10
Under 4K 0
Under 16K 0
Under 32K 0
Under 64K 0
Under 128K 0
Under 512K 0
Under 2M 0
Over 2M 0
Miscellaneous
Set-Cookie Insertions 0
Content Type Compression (bytes) Pre-Compress Post-Compress
HTML 0 0
CSS 0 0
JavaScript 0 0
XML 0 0
SGML 0 0
Plain 0 0
Octet Stream 0 0
Images 0 0
Video Files 0 0
Audio Files 0 0
Other 0 0
Total 0 0
NULL-Compress 0 0
RAM Cache
Cache Size (in Bytes) 0
Total Cached Items 0
Total Evicted Items 0
Inter-Stripe Size (in Bytes) 0
Inter-Stripe Cached Items 0
Inter-Stripe Evicted Items 0
RAM Cache Hits/Misses Count Bytes
Hits 0 0
Misses (Cacheable) 0 0
Misses (Total) 0 0
Inter-Stripe Hits 0 0
Inter-Stripe Misses 0 -
Remote Hits 0 0
Remote Misses 0 -
root@bigiplab(Active)(tmos)# sh ltm profile tcp tcp
Ltm::TCP Profile: tcp
------------------------------------
Connections
Open 0
Current in CLOSE-WAIT/LAST-ACK 0
Current in FIN-WAIT/CLOSING 0
Current in TIME-WAIT 0
Accepted 29
Not Accepted 0
Established 10
Failed 0
Expired 1
Abandoned 5
Miscellaneous
Received Reset 0
Bad Checksum Datagrams 0
Malformed Segments 0
Out-of-Order Segments 0
Received SYN-Cookies 0
Received Bad SYN-Cookies 0
SYN-Cache Overflow 0
Retransmitted Segments 0
root@bigiplab(Active)(tmos)# sh sys connection
Sys::Connections
10.10.88.1:49127 10.10.30.9:80 ::.0 tcp 0
Total records returned: 1
root@bigiplab(Active)(tmos)# sh sys connection all-properties
Sys::Connections
10.10.88.1:49127 - 10.10.30.9:80 - ::.0
-------------------------------------------
TMM 0
Type any
Protocol tcp
Idle Time 11
Idle Timeout 300
Unit ID 1
Lasthop external 00:0c:29:96:70:cd
Virtual Path 10.10.30.9:80
ClientSide ServerSide
Client Addr 10.10.88.1:49127 ::.0
Server Addr 10.10.30.9:80 ::.0
Bits In 896 0
Bits Out 480 0
Packets In 2 0
Packets Out 1 0
Total records returned: 1
root@bigiplab(Active)(tmos)# sh sys connection all-properties
Sys::Connections
10.10.88.1:49127 - 10.10.30.9:80 - 10.10.40.40:80
-------------------------------------------------
TMM 0
Type any
Protocol tcp
Idle Time 8
Idle Timeout 300
Unit ID 1
Lasthop external 00:0c:29:96:70:cd
Virtual Path 10.10.30.9:80
ClientSide ServerSide
Client Addr 10.10.88.1:49127 10.10.88.1:49127
Server Addr 10.10.30.9:80 10.10.40.40:80
Bits In 2.8K 4.0K
Bits Out 4.4K 1.9K
Packets In 6 3
Packets Out 4 4
Total records returned: 1
root@bigiplab(Active)(tmos)# create net route default gw 10.10.30.250
root@bigiplab(Active)(tmos)# create ltm snat outbound1 origins add { 10.10.40.0/24 } translation 100.100.100.100
Server# curl http://10.10.88.1/env.php
Destination IP Address:Port -> 10.10.88.1:80
Source IP Address -> 100.100.100.100:44139
X-Forwarded-For ->
root@bigiplab(Active)(tmos)# list net vlan
net vlan external {
interfaces {
1.1 { }
}
tag 4094
}
net vlan internal {
interfaces {
1.2 { }
}
tag 4093
}
root@bigiplab(Active)(tmos)# list net self
net self 10.10.30.254/24 {
allow-service default
vlan external
}
net self 10.10.40.254/24 {
allow-service default
vlan internal
}
root@bigiplab(Active)(tmos)# create ltm pool http-pool monitor http members add { 10.10.40.40:80 }
root@bigiplab(Active)(tmos)# sh ltm pool http-pool members
Ltm::Pool: http-pool
---------------------------------
Status
Availability : available
State : enabled
Reason :
Traffic ServerSide
Bits In 0
Bits Out 0
Packets In 0
Packets Out 0
Current Connections 0
Maximum Connections 0
Total Connections 0
Ltm::Pool Member: http-pool 10.10.40.40:80
-------------------------------------------
Status
Availability : available
State : enabled
Reason : Pool member is available
Traffic ServerSide General
Bits In 0 -
Bits Out 0 -
Packets In 0 -
Packets Out 0 -
Current Connections 0 -
Maximum Connections 0 -
Total Connections 0 -
Total Requests - 0
root@bigiplab(Active)(tmos)# create ltm virtual http-vs2 destination 100.100.100.100:80 profiles add { tcp http } pool http-pool
root@bigiplab(Active)(tmos)# sh ltm virtual http-vs2
Ltm::Virtual Server: http-vs2
---------------------------------------------------------
Status
Availability : available
State : enabled
Reason : The virtual server is available
CMP : enabled
CMP Mode : all-cpus
Traffic ClientSide Ephemeral General
Bits In 3.8K 0 -
Bits Out 4.6K 0 -
Packets In 6 0 -
Packets Out 4 0 -
Current Connections 0 0 -
Maximum Connections 1 0 -
Total Connections 1 0 -
Min Conn Duration/msec - - 25
Max Conn Duration/msec - - 25
Mean Conn Duration/msec - - 25
Total Requests - - 1
$ sudo ip route add default via 100.100.100.100 via 10.10.30.254 dev eth2
$ curl http://100.100.100.100/env.php
Destination IP Address:Port -> 10.10.40.40:80
Source IP Address -> 10.10.88.1
X-Forwarded-For ->
";
print $_SERVER['SERVER_ADDR'].":";
print $_SERVER['SERVER_PORT'];
print "\n";
print "Source IP Address -> ";
print $_SERVER['REMOTE_ADDR'];
print "\n";
print "X-Forwarded-For -> ";
print $_SERVER['HTTP_X_FORWARDED_FOR'];
print $_SERVER['HTTPS'];
print "\n\n\n";
?>